Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MYSQL IF语句按类别重新排序_Php_Mysql_If Statement_Sql Update_Sql Order By - Fatal编程技术网

Php MYSQL IF语句按类别重新排序

Php MYSQL IF语句按类别重新排序,php,mysql,if-statement,sql-update,sql-order-by,Php,Mysql,If Statement,Sql Update,Sql Order By,我一直在尝试根据菜单结构的类别和顺序id对数据库中的表重新排序 这就是我大致的表格结构 menuid menuname order categoryid -------------------------------------- 1 firstitem 1 1 2 seconditem 2 1 3 thirditem 1 2 4 fourthitem 2 2 像

我一直在尝试根据菜单结构的类别和顺序id对数据库中的表重新排序

这就是我大致的表格结构

menuid menuname order categoryid -------------------------------------- 1 firstitem 1 1 2 seconditem 2 1 3 thirditem 1 2 4 fourthitem 2 2 像这样:

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 试一试


顺便说一下,
order
在MySQL中是一个保留字。您必须使用反勾号来转义它,为什么不使用CASE表达式呢。你在哪里没有意义

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

当你使用WHERE条件时,不需要这样的情况:)我讨厌
order
的功能,那么如果你把订单放在singlw quotes中,你的原始语句就会起作用。现在在你和其他答案的帮助下修复了它。所有的反勾号是怎么回事?不应使用名称限定符引用值。它们是数字,可以不加引号,也可以用撇号括起来。
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
UPDATE menu
SET `order` = case when `order` = 3 
                   then 2 
                   else `order` 
              end
UPDATE menu 
SET order = case when order = `3` then `2` else `3` end