2010-01-21 93 views
2

什麼是更新「訂單」列的最佳方式?更新「訂單」列MySQL?

說我有一個0至9的id列,並順序欄從0到9

目前,它的在數據庫中作爲: 0 0,1 1,2 2等

我的HTML頁面發佈了它想要的新訂單:0 8,1 3,2 6等(這完全是隨機的,由用戶決定)。

什麼是進行更新的最佳方式?

我可以遍歷併爲每個更新運行。 我也可以創建一個包含所有對的臨時表,然後根據子查詢進行更新。

但是我覺得我忘記了一些微不足道的事情,它會做得更快。有什麼建議麼?

回答

3

你必須自己更新每一行,沒有辦法在SQL中做「地圖」更新。

(有一些技巧,但他們並不真正適用/反正在這裏幫助。)

+0

謝謝,看起來很奇怪,沒有一個更清潔的解決方案,但沒有什麼大不了的。 – Colin 2010-01-21 21:44:14

+0

我知道你的意思,但這是關係數據庫的工作方式。有一些技巧可以在某些系統上使用,即將「映射」轉換傳遞到表中,然後在更新中加入該表。在這種情況下完全不值得。 – Hogan 2010-01-21 21:54:27

0

如果用戶確實是隨機重新排序的項目,沒有什麼可以做。但通常情況下,用戶可能會對現有訂購進行小的修改,例如將列表中較高的一個項目向上移動。在這種情況下,您可以通過放寬排序順序列必須包含順序整數的約束條件來提高速度。我在here之前討論了一個可能的想法,如果你對如何實現這個細節感興趣,你可以閱讀這個建議。

但對於大小爲10的列表,它可能不值得額外的努力。只要做你正在做的事 - 在實踐中可能會很好。

+0

是的,這些通常會很短,所以效率不是最大的擔憂。我想要一個比運行10個更新更清潔的選項,但我想沒有什麼理想。謝謝 – Colin 2010-01-21 21:43:06