素材牛VIP会员
如何讓使用者可以變換每筆數據的排序?
 de***oo  分类:SQL代码  人气:895  回帖:2  发布于6年前 收藏

是這樣的
以下操作只會有一個使用者
當使用者建立每一筆數據並且用AI自動編出號碼(KEY)所以號碼不會重複
但是假設以下

1 A
2 B
3 C
4 D
5 E

前面是AI自動產生的數字 後面英文字是數據
使用者建立五筆資料後
假設我想要把排列順序變換:A移到第四個 D移到第五個 E移到第一個(假設)
請問這要如何在PHP上實現呢?因為是自動編出號碼...這樣要如何改變順序?(顯示時我是用DESC排列)

 标签:mysqlphp

讨论这个帖子(2)垃圾回帖将一律封号处理……

Lv1 新人
wx***73 移动开发工程师 6年前#1

楼主,恭喜你,提出了一个无人能解决的问题。

这个问题,在你编程的一段时间后,就会遇到,每个人都会。但是很多人选择忽略它。

这个看起来并不复杂的自定义排序问题。

它的难点在于,我们将某条数据插入到AB之间,那么,从B开始,直到最后一行数据都得往下走一行

一个不经过大脑的解决方案是:每个数据之间用很大的数值间隔,就不用每次调整所有后面的行了。例如:

id  data
100 A
200 B
300 C
400 D
500 E

那么我们把E插入到AB之间的话,就只需要将E的id改为101即可。并不用update其他行。但是这样做的误区是:
并没有解决问题,而是选择了掩耳盗铃逃避问题。当有100个元素被插入AB之间的话,C还是不可避免的要被更新。

另一个可行的方案是使用链表结构来储存每行数据。例如:

id  data   next
100 A      200
200 B      300
300 C      400
400 D      500
500 E      0

那么我们要将E插入到AB之间,只需将A的next字段改为500, E的next改为200,更新两条记录即可实现一次调整顺序。

但是这样做的不可行之处在于,mysql并不支持链表结构。

另一种取巧的办法是只允许对调两个行的位置。而不是插入两个行之间。但是应用场景受限。

所以,如何在php+mysql的架构中解决用户自定义排序的问题,还需要楼主一起思考啊

Lv1 新人
郭***己 Web前端工程师 6年前#2

这两个字段搞不定 再加一个sort字段吧 用来保存排序的数值 查询的时候 order by sort desc

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取