inf*_*rno 8 mysql sql sql-update
是否可以对列表进行排序并将订单保存在单个更新中?
我试过这种方式:
UPDATE `jos_vm_category`,(SELECT @row:=0) AS init SET @row:=@row+1, list_order=@row ORDER BY `category_name` ASC
Run Code Online (Sandbox Code Playgroud)
但得到一个错误:
1221 - UPDATE和ORDER BY的使用不正确
如果不清楚,我需要这个:
category_id | category_name | list_order
3 | A | 1
1 | B | 2
2 | C | 3
Run Code Online (Sandbox Code Playgroud)
由此:
category_id | category_name | list_order
1 | B | 1
2 | C | 2
3 | A | 3
Run Code Online (Sandbox Code Playgroud)
只有一个UPDATE.
所以list_order是表的一个字段,我必须保存行的顺序.(我已经有了解决方案,但是必须等待2天,所以如果没有人回答这个问题,我会发布.)
MySql不允许ORDER BY使用多表更新.文件
您可以使用子查询:
UPDATE jos_vm_category c
JOIN (
SELECT category_id, (@row:=@row+1) rowNum
FROM jos_vm_category, (SELECT @row:=0) dm
ORDER BY category_name
) rs ON c.category_id = rs.category_id
SET c.list_order = rs.rowNum
Run Code Online (Sandbox Code Playgroud)
或者,您可以将它们拆分为2个查询:
SELECT @row:=0;
UPDATE jos_vm_category
SET list_order = (@row:=@row+1)
ORDER BY category_name;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4432 次 |
| 最近记录: |