2016-04-23 34 views
0

我有2500左右鍵的數組: 的結構是這樣的:PHP的MySQL更新行,其中SKU不是在陣列

Array ([0] => 452BA [1] => 7fDF-39r73 [2] => 263941) 

我需要運行哪些更新我的SQL表中的所有行的代碼字段「sku」的內容在我的數組中不存在。

所以這些方針的東西:

$sql = 'UPDATE `table` set status = "0" WHERE sku NOT IN (' . implode(',', array_keys($array)) . ')'; 
+3

以及此代碼生成哪些查詢? – Shaharyar

+0

共享'echo $ sql;'輸出? – C2486

+0

@Michael你問的是如何把你當前數組中的值放到數據庫的「sku」列中? – Webeng

回答

2

您的查詢將是不正確的,它都將是像一個單一的值WHERE條款:

UPDATE `table` set status = "0" WHERE sku NOT IN ('452BA,7fDF-39r73,263941'); 

但是你需要在兩個引號邊想:

UPDATE `table` set status = "0" WHERE sku NOT IN ('452BA','7fDF-39r73','263941'); 

嘗試這樣的:

$sql = 'UPDATE `table` set status = "0" WHERE sku NOT IN ("' . implode('","', array_keys($array)) . '")'; 
+0

@Rishi感謝編輯,但也很好。 'mysql'適用於兩種引號。 – Shaharyar

0

好吧,我想我理解你的問題:)。您在某些行中有一個缺少值的數據庫。在數據庫中缺少行的地方,您希望將數組中相應的值正確地放入數據庫中的空(NULL)單元格中?

我建議你先獲取你的表的數組(只需要兩列)。從該數組中,您可以創建一個foreach循環來檢查每個特定sku插槽中的值是否爲=== NULL,如果是,則運行SQL語句以填充該插槽。

1)獲取數組:

$sql = "SELECT id, sku FROM table"; 

林調用id對應於您的陣列的key值值:Array ([0] => 452BA [1] => 7fDF-39r73 [2] => 263941)

從那裏獲取陣列(可以稱之爲$myArray)。讓我們還打電話給你前一陣$myOtherArrayArray ([0] => 452BA [1] => 7fDF-39r73 [2] => 263941)

然後你在PHP創建以下循環:

<?php 
foreach ($myArray as $key => $value) 
{ 
    if ($myOtherArray[$key] === NULL) 
    { 
    $sql = "UPDATE table SET sku =".$value." WHERE id = ".$key; 
    //run the query 
    } 
} 
?> 

讓我知道這是否有助於! :)

0

@邁克爾,我認爲你在邏輯上是正確的,但需要稍作修改。請看下面的代碼:

$imp_arr = "'".implode("','", array_keys($array))."'"; 

$sql = 'UPDATE `table` set status = "0" WHERE sku NOT IN (' . $imp_arr . ')'; 

因爲在IN如果任何項目是字符串,那麼它將由單/雙引號包圍。

有一件事我有點困惑,array_keys($ array)將只有$ array。