2012-07-29 9 views
5

Sto costruendo un'applicazione Twitter che gli utenti afferra un intero seguito e ottiene la loro specifica id Es: 1223455MySQL 1,000 's di o dichiarazioni (buona idea?)

Ho anche un enorme database pieno di righe che contengono una specifica Twitter id ... Guardate gli esempi in fila ...

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

Il problema è che tutti noi sappiamo che Twitter è tutto sempre più seguaci (1000) di, e io ero la meraviglia è che questa è una buona query MySQL da eseguire potenzialmente fino a 20 volte in uno script eseguito ...

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 
E su

e avanti e avanti e avanti ... Ci potrebbero essere potenzialmente più di 1.000 o dichiarazioni in una singola query (e una query simile come questo potrebbe essere chiamato 20 volte)

Questo non lo fa sembra una buona pratica di programmazione, ma non ho sentito parlare di un altro modo ... ??

+0

Hai usato ** ** IN parola chiave? – hmmftg

+0

Vedo che hai accettato la risposta con la lista "in". Questo è perfettamente ragionevole, ma dovresti considerare la versione che mantiene gli id ​​in una tabella e usa un join (o in). Ad un certo punto, potresti incorrere in problemi di compilazione e persino problemi di lunghezza delle query. –

risposta

4

Utilizzare il in specificatore:

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

È comunque una buona idea ... Sarà incredibilmente lento? –

+1

hai un indice per quel campo _twitterID_? –

+0

Sarà più veloce degli ors. Solo altri suggerimenti a cui posso pensare stanno usando una vista se cerchi costantemente gruppi di numeri. –

4

Questa è una pessima idea in effetti. MySQL non fa un buon lavoro con l'ottimizzazione delle istruzioni OR.

Sareste lontano meglio utilizzare un JOIN o qualcosa di simile

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

provate questo:

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