gpt4 book ai didi

MySQL - 使用单次更新保存列表顺序

转载 作者:可可西里 更新时间:2023-11-01 06:32:56 25 4
gpt4 key购买 nike

是否可以在一次更新中对列表进行排序并保存顺序?

我这样试过:

UPDATE `jos_vm_category`,(SELECT @row:=0) AS init SET @row:=@row+1, list_order=@row ORDER BY `category_name` ASC

但出现错误:

1221 - Incorrect usage of UPDATE and ORDER BY

如果不清楚,我需要这个:

category_id | category_name | list_order
3 | A | 1
1 | B | 2
2 | C | 3

来自这里:

category_id | category_name | list_order
1 | B | 1
2 | C | 2
3 | A | 3

只需一次更新。

所以 list_order 是表的一个字段,我必须在其中保存行的顺序。 (我已经有了解决方案,但是要等2天,所以如果没有人回答问题,我会发布。)

最佳答案

MySql 不允许 ORDER BY 进行多表更新。 Docs

您可以改用子查询:

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

或者,您可以将它们拆分为 2 个查询:

SELECT @row:=0;
UPDATE jos_vm_category
SET list_order = (@row:=@row+1)
ORDER BY category_name;

关于MySQL - 使用单次更新保存列表顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4971823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com