我对手动订购数据库内容的能力有疑问。
例如,我可能具有一个包含以下字段的目录:id
,sort_order
,content
。在我的网站前端,我输出的内容按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
值最终变成非常长的小数,我认为这是不理想的。
那么基本上……在数据库中可能具有成千上万个条目的手动排序项目的最佳/标准方式是什么?