我正在使用PHP / MySQL作为Web应用程序。用户可以输入不同作业的订单项。订单项的顺序很重要。为此,我有一个'ordernumber'字段。插入新线条很容易;我只需要添加一个当前最高订单号。但是对于删除和插入行,它变得棘手。现在我使用查询在每次删除后更新所有订单号。但是,有时在同一请求中可能会有许多删除。我在想有一种更简单的方法。例如,如果表中的ordernumbers是
1, 2, 5, 8, 9, 10
我是否可以运行更新查询以将其更新为
1, 2, 3, 4, 5, 6
答案 0 :(得分:0)
删除行时:
update mytable
set ordernumber = ordernumber-1
where ordernumber > {number deleted}
如果存在多个删除,则无关紧要,因为这是相对更新。
答案 1 :(得分:0)
更新整个序列: (这适用于SQL Server - 也许你可以适应MySQL!)
while exists (
select *
from mytable mt1
where not exists (
select *
from mytable mt2
where mt2.ordernumber = mt1.ordernumber - 1
)
and mt1.ordernumber > 1
)
begin
update mytable
set ordernumber = (
select isnull( max( mt3.ordernumber ), 0) + 1
from dbo.mytable mt3
where mt3.ordernumber < mytable.ordernumber
)
end