Php SQL能以本机方式处理这样的事情吗?订单字段

Php SQL能以本机方式处理这样的事情吗?订单字段,php,sql,Php,Sql,我的数据库中有一个名为“order”的字段,它表示图像在页面上的显示顺序。图像的顺序是用户可编辑的,因此在导入图像后,用户可以对其进行更改。假设我将这些图像按顺序排列为1,2,3,4,5,6,7,8…用户将图像从第8个位置移动到第3个位置…在SQL中是否有方法更新所有其他记录以向上移动一个位置,而不必在PHP中读取每个项目,编辑它们,然后将它们放回原位 所以在这种情况下,位置1和2的图像保持不变…8变为3。。。3变成4,4变成5等等是的,这是一个简单的更新语句: UPDATE images SE

我的数据库中有一个名为“order”的字段,它表示图像在页面上的显示顺序。图像的顺序是用户可编辑的,因此在导入图像后,用户可以对其进行更改。假设我将这些图像按顺序排列为1,2,3,4,5,6,7,8…用户将图像从第8个位置移动到第3个位置…在SQL中是否有方法更新所有其他记录以向上移动一个位置,而不必在PHP中读取每个项目,编辑它们,然后将它们放回原位


所以在这种情况下,位置1和2的图像保持不变…8变为3。。。3变成4,4变成5等等是的,这是一个简单的更新语句:

UPDATE images SET order = order + 1 WHERE order > 3 and order < 8
updateimagesset order=order+1,其中order>3,order<8
除此之外,您当然需要将原始行从8移动到3。

您可以尝试+1


如果prio编号减少:

UPDATE table SET prio = prio + 1 WHERE prio <= $new_prio

您的语句只在2和4之间创建了一个“洞”,您还需要更新正在移动的一个:
updateimagessetorder=3,其中order=8
我会将字段的名称
order
更改为类似
image\u order
的名称,否则它将与SQL关键字
order
冲突(如果您尚未遇到此问题)
UPDATE table SET prio = prio + 1 WHERE prio <= $new_prio
UPDATE table SET prio = prio - 1 WHERE prio >= $new_prio
update table set pos = case when pos = 8 then 3 else pos + 1 end where pos >= 3