0

我正在将 PHP/MySQL 用于 Web 应用程序。用户可以为不同的工作输入行项目。订单项的顺序很重要。为此,我有一个“订单号”字段。插入新行很容易;我只是在当前最高订单号上加一。但是对于删除和插入行,它变得很棘手。现在,我使用查询在每次删除后更新所有订单号。但是,有时在同一个请求中可能会有很多删除。我在想有一个更简单的方法。例如,如果表中的订单号是

1, 2, 5, 8, 9, 10

是否有一个更新查询我可以运行来更新它们

1, 2, 3, 4, 5, 6
4

2 回答 2

0

删除行时:

update mytable
set ordernumber = ordernumber-1
where ordernumber > {number deleted}

是否有多个删除无关紧要,因为这是相对更新。

于 2012-05-02T16:13:09.107 回答
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
于 2012-05-02T16:31:35.617 回答