我需要为我的脚本管理页面提供更改显示行顺序的功能。
为此,新添加的行有一个默认顺序(转到列表末尾),管理员应该能够更改特定行的位置。
我将像双向链表一样处理这些行,以便能够重新定位行。
- 用链表的方式保存mysql行的显示位置可以吗?
- 有没有更好的方法?
- 我应该使用单独的表来存储订单,还是可以在原始表中添加两个
next
和prev
列? - 是否可以通过此方法使用 mysql
order
语句?
编辑:我也考虑过使用间隔顺序代码(例如 0、100、200 等),但这有可能达到的限制
最佳答案
我认为您最好只将排序位置存储在专用字段中,而不是尝试实现链表。
链表的问题在于它需要某种列表遍历来“重建”顺序,然后才能将其显示给用户。通常,您会使用递归查询来执行此操作,但不幸的是,MySQL 不支持递归查询,因此您要么需要摆弄存储过程,要么最终为每个列表进行一次数据库往返节点。
总而言之,只是时不时地更新几行的顺序字段(当你需要重新排序时)可能比每次遍历列表(当你需要显示它时)更便宜,尤其是如果你主要移动行通过小距离。如果您引入间隙(正如您已经提到的),您实际需要更新的行数将急剧下降,代价是增加了复杂性。
您还可以将订单字段搭载到 clustering 上InnoDB 提供的机制。
YMMV,当然,但我建议在尝试实现任何更复杂的东西之前,先对具有代表性的数据量的简单订单字段方法进行基准测试......
关于mysql - 在mysql中存储行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22949423/