2010-11-23 134 views
1

假設我有超過1000條記錄甚至更多。只有這樣我才能想到更新所有記錄的位置。讓說我有一個名爲「position」一欄,1,2,3,4,5,MYSQL - 更改數據記錄的訂單

讓我們說用戶想要移動記錄的位置「5」之後,記錄「2」,以做到這一點,我需要更新記錄「5」記錄「3」,記錄「3」記錄「4」,記錄「4」記錄「5」。

有沒有另外一種方法來做到這一點?當你有很多記錄時,這看起來有點矯枉過正。

謝謝!

+0

什麼是主鍵?您的問題的含義將從您的表格結構中更清晰。 – 2010-11-23 16:19:14

+0

位置不是主鍵,我將列名稱稱爲「uid」作爲主鍵。 – dpark 2010-11-23 18:42:55

回答

0

而不是有一個額外的字段,你用來排序數據,引入一個NextItem外鍵。您可以保留項目的原始主鍵。主鍵仍然作爲識別值,但與排序順序無關。

你可以有這樣的:

ID: 33, Name: The first item, NextItem: 48 
ID: 48, Name: The second item, NextItem: 12 
ID: 12, Name: The last item, NextItem: NULL 

現在,所有你需要做重新整理你的數據是改變單一記錄的「NextItem」。

0

一個合適的解決方案取決於您如何使用位置信息以及您的速度要求。如果您希望數據庫在檢索記錄時執行位置排序(使用「ORDER BY position」),我無法想出一種方法來避免更新每個受影響行的位置信息。您可以通過將位置信息保存在一個單獨的表中,稍微減少過度殺傷,這些表的行只包含常規表PK的外鍵以及列「位置」。這樣你的數據庫只需要在更小的表上進行更新。