搜索

首页  >  问答  >  正文

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

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

1 A
2 B
3 C
4 D
5 E

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

巴扎黑巴扎黑2774 天前433

全部回复(2)我来回复

  • 巴扎黑

    巴扎黑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的架构中解决用户自定义排序的问题,还需要楼主一起思考啊

    回复
    0
  • 怪我咯

    怪我咯2017-04-10 18:11:34

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

    回复
    0
  • 取消回复