MySQL 中有一个带有字段的表id(int,autoincrement), [много не относящихся к вопросу полей], pos(int)。
pos 列始终是顺序为 1,2,3.... 的整数。它完成ORDER by pos并且记录以正确的顺序输出。有必要实现显示记录的自定义顺序。
请告知如何实施3件事:
- 创建一个条目并将其放置在位置 m
$db->create($pos_m) - 按 id 将记录从位置 m 移动到 n (最初查询时我知道旧位置)
$db->move($id, $pos_n, $pos_m) - 删除条目
id db->remove($id)
使用这些操作,有必要重新计算所有其他记录的位置,以确保没有间隙。如果将一个条目放在中间,则任何较大的都将移动 +1,依此类推。Pos 应该始终按顺序反映实数,而不是像这里建议的那样。
这样的入口不会很多,这样的动作也不会经常发生,所以这里不需要性能。
如果可以在纯 SQL 中实现这一点,那就太好了,但是您可以将一些工作转移到 PHP 并进行多个查询。
插入
转移
pos删除时重新计算的需要对我来说是有问题的。中断不影响排序。但是如果有必要,那么它是这样完成的我的所有操作都意味着
pos尚未为该字段创建唯一键