如何在数据库中存储手动排序的行

时间:2018-08-21 17:09:15

标签: mysql database

我对手动订购数据库内容的能力有疑问。

例如,我可能具有一个包含以下字段的目录:idsort_ordercontent。在我的网站前端,我输出的内容按sort_order排序,并希望能够通过更改项目的相对sort_order值来手动重新排列项目。

此刻,每次我将一个项目添加到MySQL数据库时,我都将sort_order的值设置为与自动递增id相同的值,因此默认情况下,这些项目将在创建它们的顺序。然后,我允许用户通过切换列表旁边的项目来向上或向下移动列表,在这种情况下,我将sort_order与下一个/上一个项目的sort_order值交换。

不幸的是,如果我想将一个项目移动到列表的上方很长一段距离,那么我必须多次单击以保持切换项目直到它到达顶部。

我想实现一个界面,在其中可以拖放项目以对其进行排序,然后将其放置在列表中的任何位置。处理这些数据的最佳方法是什么?如果我的数据库要有成千上万的条目,那么在旧位置和新位置之间更改许多项目上的sort_order效率将非常低。

我当时正在考虑在sort_order字段中允许小数,因此,如果我尝试将某个项目移动到介于sort_order的3到4之间,则该项目的sort_order将被设置为3.5。如果再将项目移至3.5到3.6之间,则它将变为3.55,依此类推。

然后的问题是,这有可能使某些sort_order值最终变成非常长的小数,我认为这是不理想的。

那么基本上……在数据库中可能具有成千上万个条目的手动排序项目的最佳/标准方式是什么?

0 个答案:

没有答案