我正在将 PHP/MySQL 用于 Web 应用程序。用户可以为不同的工作输入行项目。订单项的顺序很重要。为此,我有一个“订单号”字段。插入新行很容易;我只是在当前最高订单号上加一。但是对于删除和插入行,它变得很棘手。现在,我使用查询在每次删除后更新所有订单号。但是,有时在同一个请求中可能会有很多删除。我在想有一个更简单的方法。例如,如果表中的订单号是
1, 2, 5, 8, 9, 10
是否有一个更新查询我可以运行来更新它们
1, 2, 3, 4, 5, 6
我正在将 PHP/MySQL 用于 Web 应用程序。用户可以为不同的工作输入行项目。订单项的顺序很重要。为此,我有一个“订单号”字段。插入新行很容易;我只是在当前最高订单号上加一。但是对于删除和插入行,它变得很棘手。现在,我使用查询在每次删除后更新所有订单号。但是,有时在同一个请求中可能会有很多删除。我在想有一个更简单的方法。例如,如果表中的订单号是
1, 2, 5, 8, 9, 10
是否有一个更新查询我可以运行来更新它们
1, 2, 3, 4, 5, 6
删除行时:
update mytable
set ordernumber = ordernumber-1
where ordernumber > {number deleted}
是否有多个删除无关紧要,因为这是相对更新。
更新整个序列:(这适用于 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