欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php实现箭头上下排序

程序员文章站 2022-03-08 19:21:21
...

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

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

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

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

回复内容:

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

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

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

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

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

这样无论列表多长,每次交换的成本都是 一句select where order

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

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

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

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

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

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

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

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

相关标签: php 排序