2012-05-02 112 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