2011-06-12 93 views
5

我遇到了使用單個mysql語句更新mysql表的多行的問題。多行更新

我有rowid我想更新一個字符串例如。

$ids="id1, id2, id3, id4,...." 

和我有我的價值在另一個字符串例如。

$values="str1, str2, str3, str4,...."; 

(我有超過30000行更新)

的想法是ID1與該行應與str1和等進行更新。

我該如何解決這個問題?

感謝

+0

將這2個字符串分解爲數組和foreach循環,更新db – 2011-06-12 12:07:01

+1

我有超過30,000行要更新....這意味着運行超過30,000個查詢。有更好的解決方案嗎? – 2011-06-12 12:08:39

+0

你一定要做批量更新。但我不知道如何。也許你可以使用LOAD DATA和UPDATE ON DUPLICATE。但是這需要研究和測試。 – 2011-06-12 12:09:07

回答

1

這將是一個非常醜陋的查詢,但...

update table 
set str = case id 
      when id1 then str1 
      when id2 then str2 
      ... 
      end 
where id in (id1, id2, ...) 
+0

將此查詢組裝爲字符串 - 在for循環中運行查詢一次。 – LouwHopley 2011-06-12 12:22:28

+0

我想知道MySQL如何應對長期的查詢。 :-D – 2011-06-12 12:28:03

+0

好的,謝謝你馬上試試 – 2011-06-12 12:42:13

1

創建一個具有兩列,ID和STR一個臨時表,並做了很長的

INSERT INTO temptable VALUES (id1,str1),(id2,str2)...(idn,strn); 

您在for循環中構建字符串而不使用前往數據庫。然後你以一種明顯的方式做一個UPDATE加入臨時表。 (索引臨時表可能會有幫助,也可能沒有幫助。)

您不希望30K往返數據庫。 (另一方面,如果遇到最大字符串長度問題,則可能需要將INSERT分開。)