2012-07-29 43 views
5

我建立一個Twitter應用程序,抓住一個用戶整個的追隨者,並得到他們的特定ID 例如:1223455MySQL的1000個年代或聲明(好主意嗎?)

我也有一個龐大的數據庫滿包含特定的Twitter ID ...看看行中的例子行...

|1| 122345 | 
|2| 2232144 | 
|3| 99653222 | 
|4| 123232 | 
|5| 2321323 | 
|6| 3121322 | 

問題是,我們都知道,Twitter是所有關於越來越多的追隨者(1000的),我是奇怪的是,這是一個很好的MySQL查詢在一次腳本運行中可能運行多達20次...

SELECT * FROM table WHERE twitterID='132323' OR twitterId='23123' OR twitterId='23123' OR twitterId='23123' OR twitterId='23123' OR twitterId='23123' OR twitterId='23123' OR twitterId='23123 

和和和和... ...有可能是在一個查詢超過1000 OR語句(像這樣類似的查詢可以被稱爲20倍)

這不看起來像一個非常好的編程習慣,但我還沒有聽說過另一種方式......?

+0

您用過** **中的關鍵字? – hmmftg 2012-07-29 00:15:12

+0

我看到你接受了「in」列表中的答案。這是完全合理的,但您應該考慮將ID保留在表中並使用連接(或)的版本。在某些情況下,您可能會遇到編譯問題甚至查詢長度問題。 – 2012-07-29 01:55:58

回答

4

使用in符:

Select * from table where twitterid in (123,456,789,...) 
+0

雖然這仍然是一個好主意......會不會很慢? – 2012-07-29 00:15:13

+1

你有該字段_twitterID_的索引嗎? – 2012-07-29 00:16:17

+0

它會比ors更快。只有其他建議我能想到的是,如果您始終查找數字組,則可以使用視圖。 – 2012-07-29 00:16:41

4

這是一個非常糟糕的主意確實如此。 MySQL在優化OR語句方面做得並不好。

你會最好使用JOIN或像這樣

WHERE twitterId IN (
     select * 
     from followers 
     where followee = whatever 
) 
0

試試這個:

SELECT * 
FROM table t1 
WHERE twitterID 
     IN (select twitterID 
      from twitterIDsTable t2 
      where t1.twitterID = t2.twitterID)--for performance