2010-06-13 6 views
11

Ich versuche, Inhalt mit ID = 3 oder ID = 9 oder ID = 100 zu greifen ... Denken Sie daran, ich kann ein paar hundert dieser IDs haben.Mehrere OR-Klauseln in MySQL

Was ist der effizienteste Weg, um meine Abfrage zu schreiben?

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

Antwort

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

Irgendwann würde es wahrscheinlich einfacher, die IDs in eine temporäre Tabelle einfügen und auf die beitreten tun. Aber natürlich würde das Testen erfordern, um herauszufinden, wie viele IDs den Aufwand für die Tabellenerstellung wert machen würden. –

+1

Wie wäre es mit einer Unterabfrage anstelle einer temporären Tabelle? '... WHERE ID IN (SELECT ID VON ...)' – CoDEmanX

-1

$ sql = "SELECT name FROM Künstler WHERE id REGEXP regex-Muster"

+0

-1 ... ineffizient, wenn ein Index existiert und davon ausgeht, dass das Regex-Muster effizienter sein kann (wie Bereiche), was nicht gegeben ist (dh nicht in die Post). – TomTom

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

und die Spalten nur nennen, als Sie brauchen eher * verwenden!

7

Sie können die IN() Funktion verwenden möchten:

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

Die IN() Funktion Syntax:

expr IN (value,...)

prüfen, ob ein Wert innerhalb eines Satzes von Werten ist. ..

Gibt 1 zurück, wenn expr gleich einem der Werte in der IN-Liste ist, sonst gibt 0 zurück.

4

können Sie SQL-IN-Bedingung verwenden

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

@TooAngel: ';' wird helfen – abatishchev

Verwandte Themen