重新排序数字列

时间:2012-05-02 16:10:05

标签: mysql

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

1, 2, 5, 8, 9, 10

我是否可以运行更新查询以将其更新为

1, 2, 3, 4, 5, 6

2 个答案:

答案 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