3

当每条记录的值相同时,我已经弄清楚如何使用以下方法进行批量更新:

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

如果我有一个逗号分隔的值字符串,与 id 匹配,我可以进行批量更新,以不同方式更新值,如

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 用于 id。但是用户可以从此页面检查多达 20 个框。也许我必须以某种方式操纵数组。请注意,在实际示例中,id 不是 1、2、3,而是可能是 221、433、512、600 等,具体取决于用户检查的内容

4

2 回答 2

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/

于 2012-11-05T13:03:22.203 回答
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)
于 2012-11-05T12:59:52.707 回答