维护/更新mysql中的记录顺序

Cor*_*rey 2 mysql sorting sql-update

我在mySql中有一个记录表.我需要维护用户指定的订单.所以我添加了一个"位置"列.

移动特定记录时,更新所有记录的SQL语句是什么?我有类似的东西:

UPDATE items SET position = '2' WHERE id ='4';
UPDATE items SET position = position+1 WHERE position >= '2' AND id != '4';
Run Code Online (Sandbox Code Playgroud)

但是,如果记录下降,那么大于将会更大.有什么诀窍?谢谢!

Bil*_*win 7

这样的事情会这样吗?

UPDATE items 
SET position = CASE position 
  WHEN $oldpos THEN $newpos 
  ELSE position + SIGN($oldpos-$newpos)
 END
WHERE position BETWEEN LEAST( $newpos, $oldpos ) 
                AND GREATEST( $newpos, $oldpos );
Run Code Online (Sandbox Code Playgroud)

我测试了几次它似乎工作.