SQL批量重新排序行

Dan*_*Dan 5 sql ajax sql-update

我有一个包含记录列表的表,以及一个名为order的列.我有一个AJAX脚本来向上或向下拖放表格行,我想用它来执行查询,在拖动行时对行进行重新排序.

在PHP中,我执行查询以获取记录的当前顺序.例如1,2,3,4 AJAX函数在拖放完成后传递新顺序,例如3,1,2,4

是否有一种简单的方法可以根据新值一次性重新排序记录?我能看到的唯一其他选择是循环遍历UPDATE语句,例如SET order = 1,其中order = 3

但肯定会导致2条记录具有相同的值?

道歉,我知道这种描述可能会有些混乱.

der*_*ert 6

订单不应该是您的主要密钥; 使用where子句中的主键执行更新.

如果你真的想要,可以使用相当长的CASE语句在一个查询中完成所有操作.例:

UPDATE foo
  SET order = CASE order
    WHEN 1 THEN 2
    WHEN 2 THEN 3
    WHEN 3 THEN 4
    WHEN 4 THEN 5
  END
WHERE order IN (1,2,3,4)
Run Code Online (Sandbox Code Playgroud)

(请记住,SQL语句的行为就像它们同时更改所有值一样,因此不会执行更改1到2,然后更改为3等操作)


And*_*dyM 1

您确实想回去看看 ajax 函数的结果。看看是否可以获得重新排序的元素列表,而不仅仅是新的列表顺序。

您可以编写一个函数(在 C#/VB 中)来在给定之前和之后列表的代码中确定这一点。一旦发生增量更改,您就可以针对每次重新订购发出一个更新命令来发出更新事务。

如果您只想使用新订单。尝试添加一个名为 neworder 的新列并更新它。然后在循环完成后批量更新 currentcolumn=newcolumn 。