2011-06-03 102 views
0

我有一個MySQL表中的項目列表。 用戶可以通過在HTML列表中上下拖動它們來訂購這些項目。 然後我需要將每個項目的位置存儲在列表中。什麼是更新MySQL中多個唯一行表的最佳方式?

是否可以在一次MySQL調用中執行此操作,還是必須單獨調用每個產品來設置其自己的訂單ID?

單個調用看起來是這樣的:

UPDATE table_name SET `order` = order_number AND `product_id` = 'X'; 
+0

到底是什麼問題。如果你想更新許多獨特的行,你必須改變WHERE子句否?那麼是什麼使它獨一無二? – JonH 2011-06-03 18:36:17

+0

表格中的每一行都是唯一的產品,它具有唯一的ID ...產品的每個訂單屬性也是唯一的 - 也就是說,沒有兩個產品可以具有相同的「訂單」編號。 – diggersworld 2011-06-03 19:56:03

回答

0

嗯,你可以刪除整個表,然後插入新的訂單號碼,所有產品。這只是兩個陳述。只要這張表只包含「訂單」信息而沒有其他關鍵數據,這將會起作用。

+0

我知道這種方法......但想知道是否可能有更好的解決方案,不涉及刪除數據,特別是對於外鍵約束無法刪除數據的情況,在這種情況下,我猜測解決方案將是創建另一個產品ID和他們的訂單號表。 – diggersworld 2011-06-03 19:58:07

+0

我已經創建了一個只保存產品ID和顯示訂單號的獨立表。然後我清理表格並按照您的建議重新填充。 – diggersworld 2011-06-04 07:38:05

0

如果沒有其他數據會受到影響(CASCADE等),您可以刪除所有有問題的項目,並再次插入它們。這將是兩個疑問;用「WHERE product_id IN('X','Y',...)」刪除,並用每個項目的更新值插入。

乾淨的解決方案是在事務中做一個UPDATE,但是由於MySQL不支持延遲約束檢查,所以如果'order'屬性是UNIQUE,那麼你就會遇到問題。

相關問題