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、ID は 1,2,3 の 2 つの文字列になります。ただし、ユーザーはこのページから最大 20 個のボックスをチェックできます。たぶん、どういうわけか配列を操作する必要があります。実際の例では、ID は 1、2、3 ではなく、ユーザーが何をチェックするかによって、221、433、512、600 などになる可能性があることに注意してください。

4

2 に答える 2

8

2 番目のクエリは、各行 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 に答える