2010-08-18 24 views
3

在MySQL中,我有一個像20行(例子)的表。我想從1到x(x是本例中x = 20的項目數)的SORT列寫入排序順序(它是在picID的數組中)。用x = x + 1的值更新mysql中的20行?

我的數組開頭:10,15,1 ...]

我可以這樣做:

UPDATE table SET sort=1 WHERE picID=10 
UPDATE table SET sort=2 WHERE picID=15 
UPDATE table SET sort=3 WHERE picID=1 

...

,直到20 ...

但是,這使得更新到MySQL表20 ...

是否有可能做到這一點更有效的方式?

傑裏來處理這個

回答

2

一種方法是使用臨時表:

CREATE TABLE tmp_sort (id INT, sort_order INT); 
INSERT INTO tmp_sort VALUES (10, 1), (15, 2), (1,3); 

UPDATE table, tmp_sort 
    SET table.sort = tmp_sort.sort_order 
WHERE tmp_sort.id = table.picID; 

使用控制流的另一種方式:

UPDATE table 
    SET sort = CASE picID 
    WHEN 10 THEN 1 
    WHEN 15 THEN 2 
    WHEN 1 THEN 3 
    ELSE sort END 

注意ELSE末。如果你在那裏沒有,它會把所有東西都設置爲空白!

+0

Thanx!其中一個或另一個解決方案比20更新速度更快嗎?由於每次用戶對圖片排序進行排序都會更新,並且某些相冊有100多張圖片(100次更新),我擔心這些表現會受到影響。 – Jerry2 2010-08-18 16:50:45

+0

請問field2是什麼? – Jerry2 2010-08-18 16:52:03

+0

@Jerry這是一個錯字,我解決了我的答案。我不知道演出會是怎樣的;你必須自己測試一下。 – NullUserException 2010-08-18 16:57:06

0

不是真的,因爲您必須更新指定圖片ID的每一行。你將不得不發佈20個更新命令。如果不想發出大的SQL命令,這似乎是處理這種情況的最有效方式。