php实现箭头上下排序

发布于 2022-08-30 01:06:26 字数 577 浏览 14 评论 0

有这样一个需求,有一个列表,有一个操作顺序的选项,这个顺序操作是利用箭头排序的。
点击向上的箭头,顺序就升一个,点击向下的箭头,顺序就降一个。
具体的功能如下所示:
图片描述

我本来想用时间和order两个字段来控制,点击向上,order+1,同时更新下排序时间。
在sql里就先按order,再按时间排序。
但我发现如果新建一个项目,初始的排序都是0的话,点击第一个条目向下时,就会使order变成-1,排到最后一位。

请教各位高手有没有什么更好的实现方法。

PS:有朋友说,点击一次箭头要重新更新一次所有的条目顺序,但这样效率太低了,我放弃这种方法。
补充:非常感谢各位的热情,各位说的基本上都是同一种可行的方法,(可惜只能采纳一个答案,不然我就都采纳了。)
总结下我的方法,我在插入数据的时候,使用id作为order,这样就确保order是唯一的字段。接下来就是和最接近的一行数据的order进行值的交换。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

梦行七里 2022-09-06 01:06:27

order字段插入数据时设置为当前时间,然后某条记录点上(下)的时候找order小于(大于)本条记录的第一条(差最小)的记录,交换他们的order值

这样无论列表多长,每次交换的成本都是 一句select where order < xx limit 1(索引)和两次update

灵芸 2022-09-06 01:06:27

既然有了 order 字段并且按这个排序,更新时间就没有必要了。

点击 order = n 这一行后面的向上的剪头:

将 order = n 的 同 order = n - 1 的 order 值互换

点击 order = n 这一行后面的向下的剪头:

将 order = n 的 同 order = n + 1 的 order 值互换

心凉怎暖 2022-09-06 01:06:27

方法一:排序字段unique,升降时采用“就近替换”。这个的缺点是,插入记录若要指定跟随某行,会产生重排,最坏情况是全表,理想的只是插空。建议采用RAND获取unique值,这样可以产生空。此外重排的时候最好加上事物,防止多人操作产生奇怪的事情。
方法二:两个字段进行排序,允许排序字段重复,用额外字段来确定等值“排序字段”的排序。
方法三:排序字段是字符串XXXBBB,XXX是主序字段,BBB是辅助排序字段

恬淡成诗 2022-09-06 01:06:27

PHP配合JQUERY来做吧,交互方面会优化很多,比如使用JQUERY排序后,AJAX 传回给PHP,PHP计算排序或交换排序

守不住的情 2022-09-06 01:06:27

吐槽个:什么年代了,还用上下箭头排序,果断应该用js来搞拖动排序

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文