2012-10-10 73 views
0

我無法弄清楚這個問題,這裏有很多關於堆棧溢出的例子,但是每個例子都有差異,它們都提出了相同的問題。在MySQL中使用CASE語句更新多行

我有一個名爲「訂單」的列的80個「幻燈片」列表。訂單是一個數字,當前範圍從0到79.

如果我們刪除幻燈片,我們需要調整後面的幻燈片,我已經爲其制定了算法。

這裏是算法的結果:

UPDATE cms_slides SET order = 
    CASE order 
     WHEN 68 THEN 67 
     WHEN 69 THEN 68 
    END CASE 
WHERE order BETWEEN 68 AND 69 

這是當前的代碼是基於Soulmerge的解決方案在這裏:Updating display order of multiple MySQL rows in one or very few queries

列「命令」事實上確實存在於「cms_slides」,並值1到69全都存在於「順序」下。

錯誤消息是典型的:錯誤:您的SQL語法錯誤;檢查手冊...

有人知道代碼有什麼問題嗎?我嘗試了許多變化,但都沒有工作,這可能很簡單。

回答

2

ORDER是MySQL中的reserved word你應該使用它周圍的反引號,你不需要END CASE只需使用END

UPDATE cms_slides SET `order` = 
    CASE `order` 
     WHEN 68 THEN 67 
     WHEN 69 THEN 68 
    END 
WHERE `order` BETWEEN 68 AND 69 
+0

啊,應該意識到的是,我使用ORDER關鍵字另一個查詢的相同的腳本。現在工作正常,但謝謝! –