2012-05-02 110 views
0

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

1, 2, 5, 8, 9, 10 

是否有更新查询我可以运行他们更新到

1, 2, 3, 4, 5, 6 
+0

这听起来像一个链表。 – Randy

+0

为什么需要在删除后重新排列行? ORDER BY'ordernumber'将继续使用缺少的数字。 – Ivan

+0

您可以将订单号码存储在行而不是逗号分隔列表中吗? –

回答

0

当删除行:

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

它不该无论是否有多个删除,因为这是相对更新。

+0

谢谢,我会给这个镜头 – dano

0

更新整个序列: (这部作品在SQL服务器 - 也许你能适应它为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