php - 如何讓使用者可以變換每筆數據的排序?

查看:98
本文介绍了php - 如何讓使用者可以變換每筆數據的排序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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

1 A
2 B
3 C
4 D
5 E

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

解决方案

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

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

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

它的难点在于,我们将某条数据插入到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的架构中解决用户自定义排序的问题,还需要楼主一起思考啊

这篇关于php - 如何讓使用者可以變換每筆數據的排序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆