1

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

这就是我大致拥有的表结构

menuid menuname 订单 categoryid
--------------------------------------
1 第一项 1 1
2 第二项 2 1
3 第三项 1 2
4 第四项 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`

我收到此错误:

您的 SQL 语法有错误;检查与您对应的手册
 MySQL 服务器版本,用于在 'order = IF(order = `3`, `2`, `3`) 附近使用正确的语法
 WHERE order = `3`' 在第 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
4

2 回答 2

1

尝试

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

顺便说一句order,是 MySQL 中的保留字。你必须用反引号来逃避它

于 2012-07-20T13:25:32.477 回答
1

为什么不使用 CASE 表达式。你的 WHERE 没有意义

UPDATE menu 
SET order = case when order = `3` then `2` else `3` end 
于 2012-07-20T13:26:22.117 回答