mysql - 在mysql中存储行顺序

标签 mysql database-design

我需要为我的脚本管理页面提供更改显示行顺序的功能。
为此,新添加的行有一个默认顺序(转到列表末尾),管理员应该能够更改特定行的位置。
我将像双向链表一样处理这些行,以便能够重新定位行。

  • 用链表的方式保存mysql行的显示位置可以吗?
  • 有没有更好的方法?
  • 我应该使用单独的表来存储订单,还是可以在原始表中添加两个 nextprev 列?
  • 是否可以通过此方法使用 mysql order 语句?

编辑:我也考虑过使用间隔顺序代码(例如 0、100、200 等),但这有可能达到的限制

最佳答案

我认为您最好只将排序位置存储在专用字段中,而不是尝试实现链表。

链表的问题在于它需要某种列表遍历来“重建”顺序,然后才能将其显示给用户。通常,您会使用递归查询来执行此操作,但不幸的是,MySQL 不支持递归查询,因此您要么需要摆弄存储过程,要么最终为每个列表进行一次数据库往返节点。

总而言之,只是时不时地更新几行的顺序字段(当你需要重新排序时)可能比每次遍历列表(当你需要显示它时)更便宜,尤其是如果你主要移动行通过小距离。如果您引入间隙(正如您已经提到的),您实际需要更新的行数将急剧下降,代价是增加了复杂性。

您还可以将订单字段搭载到 clustering 上InnoDB 提供的机制。

YMMV,当然,但我建议在尝试实现任何更复杂的东西之前,先对具有代表性的数据量的简单订单字段方法进行基准测试......

关于mysql - 在mysql中存储行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22949423/

相关文章:

php - mysqli_real_escape_string创建SQL语法错误

php - 从多个表中选择-PHP

php - 从 php 检索 JSON 时出错 - Android

php - 数据库中许多主表的公共(public)子表

sql - 每组值的自定义序列/自动增量

mysql - 创建此数据库的 E-R 图

java - 如何用 ORMLite 表示模型中的对象列表字段?

java - MySQL 的 JDBC 连接器无法在 JMeter 中工作

php - Symfony 3 - 来自数据库的动态表单字段

关于 Facebook 等社交网络的数据库模式