我有一张桌子,里面有文章。默认情况下,根据文章的添加日期对文章进行排序(描述)所以最新的文章最先出现。
但是,我想让编辑能够更改文章的顺序,以便它们可以按他喜欢的顺序显示。所以我在考虑添加一个整型的"order“列。
我左右为难,不知道如何处理这件事,因为当一篇文章的顺序被编辑时,我不想改变所有其他的。
解决此问题的最佳实践是什么?还有像Wordpress这样的CMS是如何处理这个问题的呢?
发布于 2017-11-28 07:01:03
在移动的记录的原始位置和新位置之间更新记录可能是最简单和最可靠的解决方案,并且可以在两个查询中完成,假设您在排序列上没有唯一键。
Bill的评论建议的想法听起来像是一个很好的替代方案,但是在相同的区域中有足够的移动(大约32个浮点数,64个双精度),你仍然可能会遇到精度问题,需要检查和处理。
编辑:好的,我很好奇并运行了一个测试;看起来你可以在0到1之间对浮点列149次进行半浮点运算(仅取0.5,.25,.125等)。不包括.75之类的);所以这可能不是什么大问题。
Edit2:当然,这意味着恶意用户可以通过简单地将第三项在第一项和第二项之间移动150次来造成问题(即,通过移动新的第三项来“交换”第二项和第三项。
发布于 2017-11-29 23:19:59
更具挑战性的是方便项目迁移的UI。
首先,确定主要目标是什么。采访编辑,然后“从字里行间读出”--他们不会真正告诉你他们想要什么。
同时,UI需要显示足够的信息,以清楚项目是什么,但足够紧凑,以适应单个屏幕。(这可能是一个无法解决的问题。)
一旦你决定了UI,数据库的内部结构就不是什么大问题了。INT和FLOAT --两者都可以工作。
INT --易于交换相邻的配对;用于将项目移动到列表顶部时更加混乱。FLOAT --在大约20次重新排列后耗尽精力(在最坏的情况下)。DOUBLE将持续更长时间;BIGINT可以模拟这一点--通过从物品编号之间的巨大差距开始。
回到你的问题--我怀疑是否有一个“标准”的方法来解决这个问题。把它想象成一个可以处理的“简单”问题。
https://stackoverflow.com/questions/47520479
复制相似问题