2012-07-02 99 views
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子句中。將多個重複的MySQL查詢合併爲一個?

+0

你想通過把它們放在一個單獨的查詢來解決問題是什麼? – Mark

回答

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 
+0

這個答案:獲勝! – threepoint1416

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; 
| 
+1

這可能有用;) – HelpNeeder