2016-07-02 9 views
0

問題:データベースからデータを呼び出すforeachループに配列を呼び出すにはどうすればよいですか?それは私が$station_name$timeを取得し、データベースが$station_name_db$time_db値にそれを比較する必要があり、そのデータから、$xml_data_array;データベースを扱うforeachループにdata_arrayを呼び出す方法

の下に格納され

Array 
(
    [0] => Array 
     (
      [time] => 2016-07-01 19:00:00 
      [name_station] => RC Bilogora 
      [longitude] => 17.162 
      [latitude] => 45.882 
      [type_station] => 0 
      [temperature] => 28.8 
      [humidity] => 62 
      [pressure] => 1015.7 
      [pressure_tendency] => -0.5 
      [wind_direction] => SW 
      [wind_velocity] => 1.6 
      [precipitation] => preteĹľno vedro 
      [icon] => 2 
     ) 

    [1] => Array 
     (
      [time] => 2016-07-01 19:00:00 
      [name_station] => Bjelovar 
      [longitude] => 16.869 
      [latitude] => 45.910 
      [type_station] => 1 
      [temperature] => 28.6 
      [humidity] => 54 
      [pressure] => 1015.8 
      [pressure_tendency] => -0.5 
      [wind_direction] => NW 
      [wind_velocity] => 1.4 
      [precipitation] => lahor 
      [icon] => - 
     ) 

    [2] => Array 
     (
      [time] => 2016-07-01 19:00:00 
      [name_station] => Crikvenica 
      [longitude] => 14.689 
      [latitude] => 45.173 
      [type_station] => 1 
      [temperature] => 28.0 
      [humidity] => 62 
      [pressure] => 1015.8 
      [pressure_tendency] => -0.9 
      [wind_direction] => E 
      [wind_velocity] => 1.8 
      [precipitation] => povjetarac 
      [icon] => - 
     ) 
... 

は現在、私は配列を持っています。

このコードの一部は、データベースと通信します:

try { 
       $sql_vwstationmeasurment_select = "SELECT * FROM vwstationmeasurment"; 
       $stmt_vwstationmeasurment_select = $dbh->prepare($sql_vwstationmeasurment_select); 
       $stmt_vwstationmeasurment_select->execute(); 
       $result_vwstationmeasurment_select = $stmt_vwstationmeasurment_select->fetchAll(PDO::FETCH_ASSOC); 

       $result_vwstationmeasurment_select_array = array(); 
       foreach($result_vwstationmeasurment_select as $row) { 
         $station_name_db = $row['station_name']; 
         $time_db = $row['time']; 

         // how to invoke $station_name and $time here? 
         if ($station_name_db != $station_name OR empty($station_name_db)){ 
          // do something 
         } elseif($time_db != $time){ 
          // do something 
         } 
           $result_vwstationmeasurment_select_array[] =($row); 
       } 

       // save transaction 
       $dbh->commit(); 

           // close database connection 
       $dbh = null; 

     } catch (PDOException $e) { 
       // cancel the transaciton if something went wrong and write msg about it 
       $dbh->rollBack(); 
       print "Error!: " . $e->getMessage() . "<br/>"; 
       die(); 
     } 

私はそれに$xml_data_array($のSTATION_NAMEと$時間)からデータを呼び出す方法を知りませんか?私はどんな種類の助けも賛美するだろう。

+0

あなたがしようとしていることは本当に明確ではありません。 db-dataとarrayの間の接続は何ですか?あなたはIDを持っていますか? – Jeff

+0

dbと通信する上記のコードを見てください、そこにコメントがあります。だから、foreachループで$ xml_data_arrayから$ station_nameと$ timeを呼び出す方法はわかりません。私は最初のループ内で別のforeachループを呼び出す方法しか知りませんが、その後私のデータは何度も挿入されます。 http://stackoverflow.com/questions/38161353/inserting-and-updating-data-into-a-database-under-certain-terms?noredirect=1#comment63751348_38161353 – vayacondios2015

+0

私はまだ分かりませんあなたは何を達成したいのですか?配列とデータベースの間にどのような関係がありますか?(任意のID?)...しかし、ここにあなたが持っている簡単な質問に対する簡単な答えです: '$ station_name = $ xml_data_array [0] [' name_station '];' – Jeff

答えて

0

あなたが達成したいことを見つけるために何らかのコミュニケーションをとった後、ここに私の答えがあります。コメントは長すぎます。

あなたは基本的にあなたのデータベースにまだ格納されていない配列の項目があるかどうかをチェックしたいと思っています。それと解除を通して

が保存されているすべてのステーションを取得し、ループ:行うには

はので、私はあなたがそれが速く、他のラウンド方法かもしれないいずれかの側に期待する項目数に応じて、

// loop through that array 
foreach($xml_data_array as $i => $station) { 
    // check in database if you've got that station already 
    $sql = "Select ID [or any other fieldname, please don't all with *] from vwstationmeasurment where station_name= ?" 
    // prepare that statement 
    $stmt = $dbh->prepare($sql_vwstationmeasurment_select); 
    // bind params: 
    $stmt->bind_param('s', $station['name_station']); 
    // execute 
    $stmt->execute(); 
    // get row-count as "found" 
    $stmt->store_result(); 
    $found = $stmt->num_rows; 

    // check if we have NOT got a match 
    if(!$found) { 
     // insert that item into database 
    } 

} 

をいただきたいです配列内の一致する項目を指定し、残りを挿入します。

Insert IGNOREを使用することでしょうもう一つの可能​​性 - 詳細: How to 'insert if not exists' in MySQL? をしかし、フィールドstation_nameがユニークとして定義されなければならないことをため。

関連する問題