> 백엔드 개발 > PHP 튜토리얼 > php实现箭头上下排序

php实现箭头上下排序

WBOY
풀어 주다: 2016-06-06 20:40:45
원래의
1901명이 탐색했습니다.

有这样一个需求,有一个列表,有一个操作顺序的选项,这个顺序操作是利用箭头排序的。
点击向上的箭头,顺序就升一个,点击向下的箭头,顺序就降一个。
具体的功能如下所示:
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.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿