2015-12-03 153 views
1

我有一個CSV文件I環通讓,看起來像這樣的數組OD數據:PHP比較陣列數據

$data[0]['StockNumber'] 

這陣400個的不同行。 我需要將這些值與我的數據庫進行比較,並執行3個操作。

從我的數據庫中選擇數據並返回爲對象。

如果$ data [0] ['stockNumber']存在於我的數據庫中,我想更新我的數據庫。 如果$ data [0] ['stockNumber']不存在,我想添加到我的數據庫。

之後,如果股票號碼存在於我的數據庫中,但不在我的CSV中,我想從我的數據庫中刪除。

我該如何循環?

這裏是我使用

 function ImportCSV2Array($filename) 
{ 
    $row = 0; 
    $col = 0; 

    $handle = @fopen($filename, "r"); 
    if ($handle) 
    { 
     while (($row = fgetcsv($handle, 4096,'|','"')) !== false) 
     { 
      if (empty($fields)) 
      { 
      $fields = $row; 
      continue; 
     } 

      foreach ($row as $k=>$value) 
      { 
      $results[$col][$fields[$k]] = $value; 
     } 
      $col++; 
       unset($row); 
     } 
     if (!feof($handle)) 
     { 
      echo "Error: unexpected fgets() failn"; 
     } 
     fclose($handle); 
    } 

    return $results; 
} 

$csvArray = ImportCSV2Array($filename); 
print_r($csvArray[4]['StockNumber']); 

"SELECT StockNumber FROM my_table" 
$result = $conn->query($sql); 

現在的代碼,我怎麼能檢查所有從$的衣被合計導致對價值$結果

+0

書寫代碼將是一個很好的開始... –

回答

1

IMO你的方法來解決這個任務是錯誤的。

下面是我將如何做到這一點。

1-在mysql中創建臨時表,解析CSV文件&將文件數據添加到臨時表中。

2-運行單個查詢更新數量或任何如果ID在原始表中存在。

update `original_table` `ot` set `ot`.quantity = `t`.`quantity` 
inner join temp_table `t` on ot.id = t.id 

3-運行一個查詢刪除並不在我的臨時表中存在

delete from `original_table` WHERE `id` NOT IN(SELECT `id` FROM `temp_table`) 

4-運行的單個查詢添加存在於我的臨時表,但不是在我原來的表產品產品。

eg: INSERT INTO `original_table` (`id`, `name` ...) SELECT `id`, `name` ... FROM `temp_table` WHERE `temp_table`.`id` NOT IN(SELECT `id` FROM `original_table`) 

這種方法您的整個過程將需要幾秒鐘。

Ofcourse這只是一個例子,先試着用本地數據來看看在把它投入生產之前,一切工作正常。

+0

聽起來很有保證。我會嘗試。 – maphaneuf