Mehrere Werte in einer Abfrage suchen

djjlx

---???---
ID: 62937
L
9 Mai 2006
599
21
Hallo!

Ich sitz jetzt schon seit 8 Uhr morgens an folgenden Problem.
Ich würde gerne mehrere feste IDs mit einer QUERY Abfrage abfragen.

Die einfachste Methode:
PHP:
$suchbegriff = 100,156,236,458,469,15156,62578;

SELECT * FROM `table` WHERE
`id` = 100
OR `id` = 156
OR `id` = 236
OR `id` = 458
OR `id` = 469
OR `id` = 15156
OR `id` = 62578

Die Variable $suchbegriff wird dynamisch erzeugt.

Ich hab heute schon einges Probiert find aber keine lösung die wirklich diese IDs suchen.

Mit WHERE `id` IN ($suchbegriff) wird nur die erst gefundene Id ausgegeben.
Mit WHERE `id` REGEXP '($suchbegriff) wird zb. alle ID ausgegeben die eine 1 enthalten.

Gibt es da eine schönere Lösung oder ist es das beste jede ID mit OR abzufragen?

Gruss
djjlx
 
Die Lösung mit IN sollte eigentlich schon funktionieren. (Was für Datentypen werden in der DB verwendet? Wie sieht die Query aus, welche an die DB geschickt wird?,...)

Erstmal schlage ich vor, dass du deinen "echten" PHP Code hier postest. Denn deine erste Zeile ergibt ja schon mal einen Parse-Error. Da kann man ansonsten nur raten, ob das ein String sein soll, oder ein Array, ... .
 
Dafür ist IN da und ich wüsste nicht warum das nicht funktionieren sollte. Wenn da nur ein Ergebnis kommt, ist entweder ein Limit mit im Query oder es ist wirklich nur ein passendes Ergebnis in der DB.
 
IN :yes:

Beachte bei dynamisch erzeugten Ausdrücken, dass der leere IN-Ausdruck
Code:
SELECT bar FROM foo WHERE id IN ();
zum SQL-Syntaxfehler führt. Das musst du also abfangen, wenn du mit implode() arbeitest.
 
also wenn du als $suchbegriff ein vernünftiges Array hast a la:
PHP:
$suchbegriff = array(100,156,236,458,469,15156,62578);
dann sollte folgende IN-Konstruktion problemlos funktionieren:
PHP:
mysql_query("SELECT * FROM `table` WHERE `id` IN (".implode(', ', $suchbegriff).")");
(ungetestet)

mfg
Gsus
 
Danke!

Mit
PHP:
FROM `table` WHERE `id` IN (".implode(', ', $suchbegriff).")");
hats geklappt.

Gruss
djjlx
 
Zuletzt bearbeitet:
Das is genau das, wovor ich gewarnt hab... Der Fall count($suchbegriff)==0 muss separat abgedeckt werden.