Php 在按列排序的表中移动记录的最佳方法
在MySQL数据库中创建上下移动记录的函数时,我遇到了一个问题。我当前的表如下所示:Php 在按列排序的表中移动记录的最佳方法,php,mysql,sql,sorting,Php,Mysql,Sql,Sorting,在MySQL数据库中创建上下移动记录的函数时,我遇到了一个问题。我当前的表如下所示: Id UNSIGNED INT AI PRIMARY | Some other columns | Sort UNSIGNED INT INDEX 假设我有一些数据: 1 | FirstRecord | 1 2 | Second | 2 3 | Third | 3 4 | 4th | 4 Much more data... 在对“Id=4”执行“向上移动”操作后,我希望“Id=4”获得“Sort”的“Id@
Id UNSIGNED INT AI PRIMARY | Some other columns | Sort UNSIGNED INT INDEX
假设我有一些数据:
1 | FirstRecord | 1
2 | Second | 2
3 | Third | 3
4 | 4th | 4
Much more data...
在对“Id=4”执行“向上移动”操作后,我希望“Id=4”获得“Sort”的“Id@over”和“Id@over”获得“Sort”的“Id=4”
我在乞讨上的东西:
- 我要移动的记录的Id
- 我要移动的方向(上/下)
- 我的记录上移或下移(交换“排序”值)
- “排序”列中的连续数字
- 因为我使用的是php5.4,所以我可以使用这种语言中的一些代码,而不仅仅是纯sql
- 我必须为高负载和同时请求做好准备
- 我不想创建MySQL过程或函数。最好的方法是在一个简单的查询中完成
- 最简单的方法是使用php和:
- 获取当前Id的“排序”(第一次查询)
- 查找上/下列的Id(第二次查询)
- 获取此列的“排序”(第三次查询)
- 交换“排序”值(第4次和第5次查询)
- 更复杂,也使用php
- 将“排序”更改为浮动(在beggining,而不是每次)
- 从记录中减去或添加1.5
- 更新SQL查询中的或记录以使数字连续
- 与以前类似
- 从要移动的记录中减去/添加1
- 使用我们的Id作为第二个排序参数,通过查询分配连续的数字
感谢您的重播。您需要对要移动的记录进行一次查询才能获得排序索引。然后,您应该将新的排序索引作为来自排序UI的输入 如果只是交换两个项目,可以在一个查询中完成:
UPDATE table SET sort_index = IF(id === ?id?, ?new_sort_index?, ?old_sort_index?) WHERE id = ?id? OR sort_index = ?new_sort_index?
使用IF
一次更新两条记录
如果可以将一个项目移动到多个位置,则需要执行范围更新。首先找出方向:向上/向下。然后执行如下查询:
UPDATE table SET sort_index = sort_index + 1 WHERE sort_index >= ?new_sort_index? AND sort_index < ?old_sort_index?
updatetable SET sort\u index=sort\u index+1其中sort\u index>=?新的排序索引?和排序索引<?旧排序索引?
这在新的排序索引处创建了一个空间?在旧的排序索引中删除了一个空格
然后执行最后一个查询,为移动的记录设置新的排序索引
如果你的索引是稀疏的(即存在漏洞),那么后一种方法是有效的,而前一种方法不是,所以请记住这一点