2
UPDATE some_table set rank=1 WHERE id=25
UPDATE some_table set rank=2 WHERE id=15
UPDATE some_table set rank=3 WHERE id=10
UPDATE some_table set rank=4 WHERE id=12
UPDATE some_table set rank=5 WHERE id=13
UPDATE some_table set rank=6 WHERE id=14
UPDATE some_table set rank=7 WHERE id=11

考えられなかったので、どうすればこれを単一のクエリに変えることができますか? これらの値はid連続しています。画像があり、ユーザーがこれらの画像のシーケンスを再配置することを選択できるフォト ギャラリーを考えてみてください。バックエンドは、ユーザー定義のシーケンスに基づいてランクを割り当て、ORDER BY 句で使用されます。

4

2 に答える 2

8
update some_table 
set rank = case 
    when id = 25 then 1 
    when id = 15 then 2
    when id = 10 then 3 
    when id = 12 then 4
    when id = 13 then 5 
    when id = 14 then 6 
    when id = 11 then 7 
end
于 2012-07-02T14:08:30.377 に答える
2

ケース構造を使用できます...これに似ています..

CASE id1
    WHEN id = 25 THEN UPDATE some_table SET rank = 1
ELSE
    WHEN id = 15 THEN UPDATE some_table SET rank = 2
ELSE
    etc...
END CASE

参照:

DELIMITER |

CREATE PROCEDURE p()
BEGIN
DECLARE v INT DEFAULT 1;

CASE v
  WHEN 2 THEN SELECT v;
  WHEN 3 THEN SELECT 0;
  ELSE
    BEGIN
    END;
END CASE;
END;
|
于 2012-07-02T14:11:36.407 に答える