由于您没有提供代码或数据库结构,我将尝试解释一个基本的订购系统,我希望您了解如何解决您的问题。
想象一下,这些是您的 mysql 表中的数据:
id - parent - title - order
1 - 0 - abc - 1
2 - 0 - xyz - 2
3 - 1 - 123 - 1
4 - 1 - 456 - 3
5 - 1 - 789 - 2
如果您进行这样的查询:
SELECT ... ORDER BY order, id ASC
你会有这样的树:
- root (id:0)
|
|___ abc (id:1)
| |___ 123 (id:3)
| |___ 789 (id:5)
| |___ 456 (id:4)
|
|___ xyz (id:2)
如果你点击 entry 789
(id:5),给它一个比 entry 更高的顺序123
,你的 SQL 查询应该是这样的:
UPDATE table SET order = order + 1 WHERE order = order - 1 AND parent = 1
下一个查询:
UPDATE table SET order = order - 1 WHERE id = 5
你的树应该是这样的:
- root (id:0)
|
|___ abc (id:1)
| |___ 789 (id:5)
| |___ 123 (id:3)
| |___ 456 (id:4)
|
|___ xyz (id:2)
如果您需要更灵活的方式,也可以使用类似的方法:
(这里我假设您有 100 行从 1 到 100 排序,并且您想将 id:33 移动到 id:51 之后的位置)
UPDATE table SET order = order + 1 WHERE order >= 51
UPDATE table SET order = 51 WHERE id = 33
UPDATE table SET order = order - 1 WHERE order BETWEEN 33 AND 50