2011-03-14 80 views
0

我們有ID的列表,例如:MySQL查詢,選擇的結果有一定的陣列

11, 22, 55, 99, 187 

我們有一個字段「ID」的表。

我們基本上要選擇所有結果,其中id等於11, 22, 55, 99, 187

什麼是做一個MySQL查詢像這樣的最佳方式?

相反= '11' OR '22'.....

我們使用這些用PHP,因爲我們有ID的列表,並希望選擇使用這些ID與一個MySQL查詢的結果做WHERE ID的。

回答

3

使用此

Where id IN (11,22,55,99,187) 
0

您可以使用MySQL的IN-function

喜歡的東西:

SELECT id from table where id IN (11, 22, 55, 99, 187); 

這真的邏輯,只是閱讀手冊。

1

至於其他的答案,你可以使用IN (...)條款提及。但如果你有ID值的一個長長的清單,並希望獲得最佳的性能,那麼我會建議使用臨時表來存儲值,然後在臨時表上使用INNER JOIN

/* Create the temporary table */ 
CREATE TEMPORARY TABLE temp_lookup (id INT NOT NULL); 
/* Insert values in temp table */ 
INSERT INTO temp_lookup (id) VALUES (11), (22), (55), (99), (187), ...; 
/* Select using INNER JOIN */ 
SELECT mt.field_list 
FROM main_table AS mt INNER JOIN temp_lookup AS tt ON mt.id = tt.id 
+0

你真的測試這個或者你有一些參考?收益是多少?我運行了一個非常有限的測試(4個查找值/ 160k記錄)並沒有看到增益,實際上看到的性能更差 - 0.12s vs 0.20s。在此之後,我用temp_lookup中的33個不同的值做了另一個測試 - 加入/溫度爲0.62與IN爲0.12的差異。我看不到任何證據(也不是邏輯)臨時表會更快。 (這兩個測試在ID上都沒有索引運行,兩個方法的索引都運行在0.0s;除了臨時表1需要0.03s來創建臨時表) – Unreason 2011-03-14 12:59:29