2012-07-20 22 views
1

我一直在試圖根據菜單結構的類別和順序ID重新排序數據庫中的表。MYSQL IF語句按類別重新排序

這是我大致的表結構

menuid menuname  order categoryid 
-------------------------------------- 
1  firstitem  1  1 
2  seconditem  2  1 
3  thirditem  1  2 
4  fourthitem  2  2

我已經試過這句法:

UPDATE yourtable SET id=IF(id=2, 3, 2) where id in(2,3) 

這樣的:

UPDATE menu 
SET order = IF(order = `3`, `2`, `3`) 
WHERE order = `3` 

我得到這個錯誤:

You have an error in your SQL syntax; check the manual that corresponds to your 
MySQL server version for the right syntax to use near 'order = IF(order = `3`, `2`, `3`) 
WHERE order = `3`' at line 2

解決方案代碼:

UPDATE menu 
SET `order` = case when `order` = 3 then 2 else 3 end 
WHERE `order` = 3 AND section = 2 OR `order` = 2 AND section = 2 
+1

什麼是所有的反引號?您不應該使用名稱限定符引用值。它們是數字,它們可以不帶引號或用撇號引用。 – 2012-07-20 13:27:53

回答

1

嘗試

UPDATE menu 
SET `order` = case when `order` = 3 
        then 2 
        else `order` 
       end 

順便說order是在MySQL的保留字。你必須使用反引號來逃避它

+0

當您使用WHERE條件時,CASE不是必需的:) – Madhivanan 2012-07-20 13:26:56

+0

我討厭'訂單'的特性 – Adsy2010 2012-07-20 13:28:54

+0

然後,您的原始聲明將起作用,如果您以單引號引用訂單 – Madhivanan 2012-07-20 13:30:08

1

你爲什麼不使用CASE表達式。你在哪裏沒有意義

UPDATE menu 
SET order = case when order = `3` then `2` else `3` end