2010-06-13 18 views
11

Sto provando ad accedere al contenuto dove id = 3 O id = 9 O id = 100 ... Tenete presente che posso avere alcune centinaia di questi ID.Multiple OR Clauses in MySQL

Qual è il modo più efficiente per scrivere la mia query?

$sql = "SELECT name FROM artists WHERE (id=3 OR id=9 OR .... id-100)" 

risposta

26
.... 
WHERE id IN (3, 9, 100, ...) 
+1

Ad un certo punto probabilmente sarebbe più facile inserire gli ID in una tabella temporanea e fare un join su questo. Ma naturalmente ciò richiederebbe un test per scoprire quanti ID farebbero un valore aggiunto per la creazione della tabella. –

+1

Che ne dici di una sottoquery anziché di una tabella temporanea? '... WHERE id IN (SELECT id FROM ...)' – CoDEmanX

-1

$ sql = "SELECT Nome FROM WHERE id artisti REGEXP regex-modello"

+0

-1 ... inefficiente se esiste un indice e si presuppone che il modello regex possa essere più efficiente (come gli intervalli), che non è un dato (cioè non in il post). – TomTom

4
SELECT * FROM table WHERE id IN (1, 2, 3 etc) 

E chiamare solo le colonne necessari piuttosto che usare *!

7

si consiglia di utilizzare la funzione IN():

... WHERE id IN (3, 9, 100); 

La IN() funzione di sintassi:

expr IN (value,...)

Verificare se un valore è all'interno di un insieme di valori . ..

Restituisce 1 se expr è uguale a uno qualsiasi dei valori nell'elenco IN, altrimenti restituisce 0.

4

È possibile utilizzare SQL in condizioni

SELECT * FROM table WHERE ID IN ('1', '2', '3', '4'); 
1
SELECT * FROM table WHERE id IN (1,2,5); 
2
SELECT * FROM table WHERE id IN (1,2,5) 
+0

@TooAngel: ';' aiuterà – abatishchev