是這樣的 以下操作只會有一個使用者
當使用者建立每一筆數據並且用AI自動編出號碼(KEY)所以號碼不會重複
但是假設以下
1 A
2 B
3 C
4 D
5 E
前面是AI自動產生的數字 後面英文字是數據
使用者建立五筆資料後
假設我想要把排列順序變換:A移到第四個 D移到第五個 E移到第一個
(假設)
請問這要如何在PHP上實現呢?因為是自動編出號碼...這樣要如何改變順序?(顯示時我是用DESC排列)
巴扎黑2017-04-10 18:11:34
楼主,恭喜你,提出了一个无人能解决的问题。
这个问题,在你编程的一段时间后,就会遇到,每个人都会。但是很多人选择忽略它。
这个看起来并不复杂的自定义排序问题。
它的难点在于,我们将某条数据插入到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的架构中解决用户自定义排序的问题,还需要楼主一起思考啊