2012-11-05 92 views
3

我已經找到了如何做批量更新,如果值是使用每個記錄相同:PHP/MySQL的:批量更新多個值

UPDATE tbl SET col1='foo1' WHERE id IN (1,2,3) 

如果我有一個逗號分隔值的字符串,匹配的IDS,我可以做到這一點更新值的批量更新不同,如

UPDATE tbl SET col1='1,0,1' WHERE id IN (1,2,3) 

感謝建議:

編輯:

將數據發送到該查詢的html頁面包含複選框如下:

<input type="checkbox" name="id[]" value="1"><input type="hidden" name="col1[]" value=0> 
<input type="checkbox" name="id[]" value="2"><input type="hidden" name="col1[]" value=1> 
<input type="checkbox" name="id[]" value="3"><input type="hidden" name="col1[]" value=0> 

等多達20個箱子。

在服務器端,使用implode將發佈的數組轉換爲以逗號分隔的字符串,所以我最終得到了兩個字符串,1,0,1代表值,1,2,3代表ids。但用戶可以從此頁面查看多達20個框。也許我必須以某種方式操作數組。請注意,在實際示例中,ID不是1,2,3,但可能類似於221,433,512,600等,具體取決於用戶檢查的內容。

回答

8

第二個查詢將更新每行1,2,3爲相同的值 '1,0,1'

我想你需要的是

UPDATE mytable 
    SET myfield = CASE other_field 
     WHEN 1 THEN 'value' 
     WHEN 2 THEN 'value' 
     WHEN 3 THEN 'value' 
    END 
WHERE id IN (1,2,3) 

參考 http://www.karlrixon.co.uk/writing/update-multiple-rows-with-different-values-and-a-single-sql-query/

+0

是否需要迭代a new當你得到每個元素的情況。元素/ id的數量未知,因爲它來自用戶檢查框的頁面,可以從0到20進行檢查。請參閱上面的編輯以查詢數據是如何到達的 – user1260310

0

當col1是varchar數據類型時,這是完美的。

UPDATE tbl SET col1=CASE WHEN id=1 then 1, 
         WHEN id=2 then 0, 
         when id=3 then 1 END WHERE id IN (1,2,3) 
+0

是可能的嗎? –

+0

是可能的。 – AnandPhadke

+0

我認爲所有3'id's'(1,2,3)將具有相同的值「1,0,1」。它不會自動匹配每個ID。 –