2010-06-13 6 views
11

J'essaie de récupérer du contenu où id = 3 OU id = 9 OU id = 100 ... Gardez à l'esprit, je peux avoir quelques centaines de ces identifiants.Plusieurs clauses OU dans MySQL

Quel est le moyen le plus efficace d'écrire ma requête?

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

Répondre

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

À un certain moment, il serait probablement plus facile d'insérer les ids dans une table temporaire et faire une jointure sur ce point. Mais bien sûr, cela nécessiterait des tests pour savoir exactement combien d'identifiants rendraient la surcharge de création de la table intéressante. –

+1

Que diriez-vous d'une sous-requête au lieu d'une table temporaire? '... O WH id ID IN (SELECT id FROM ...)' – CoDEmanX

-1

$ sql = "SELECT nom d'artistes WHERE id REGEXP regex-modèle"

+0

-1 ... inefficace si un index existe et suppose que le motif regex peut être plus efficace (comme les plages), ce qui n'est pas une donnée (c.-à-d. la poste). – TomTom

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

Et appeler uniquement les colonnes dont vous avez besoin plutôt que d'utiliser *!

7

Vous pouvez utiliser la fonction IN():

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

La syntaxe de la fonction IN():

expr IN (value,...)

Vérifiez si une valeur est dans un ensemble de valeurs . ..

Renvoie 1 si expr est égal à l'une des valeurs de la liste IN, sinon renvoie 0.

4

Vous pouvez utiliser SQL état

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

@TooAngel: ';' aidera – abatishchev

Questions connexes