DB Abfrage: WHERE id IN array

BocaSpanky

Mitglied
Hi,

folgende Situation:

Ich frage meine DB in folgendem Muster ab:

PHP:
mysql_query("SELECT * FROM fragen WHERE id IN (".implode(',',$fragen_aktiv_1).") "

Das Array $fragen_aktiv_1 schaut wiefolgt aus:

PHP:
Array
(
    [0] => 3
    [1] => 1
    [2] => 2
    [3] => 6
    [4] => 4
    [5] => 5
)

Ergebnis soweit auch OK. Nur hätte ich gerne in meine while Schleife die Sortierung des Arrays und nicht die der Datenbank.

Die jetzige Ausgabe sortiert die while Schleife nach der ID in der Datenbank: 1,2,3,4,5,6.
Würde aber gerne die im Beispiel Array: 3,1,2,6,4,5.

Kann ich da evtl. ein ORDER BY $array mit angeben?

Grüße
Patrick
 
So müsste es klappen:

PHP:
"SELECT * FROM fragen WHERE id IN (".implode(',' ,$fragen_aktiv_1) .") ORDER BY FIELD (id, " .implode(',', $fragen_aktiv_1) .")";
 
Mir konnt gerade nix mit SQL in den Sinn aber mit PHP.
PHP:
$result = mysql_query("SELECT * FROM fragen WHERE id IN (".implode(',',$fragen_aktiv_1).")");
//Alle Zeilen in ein Array schreiben mit der ID als Index
$rows = array();
while($row = mysql_fetch_assoc($result)){
    $rows[$row['id']] = $row;
}        
//Array nach Index sortieren
ksort($rows);
//Wie gewohnt weiterarbeiten
foreach($rows as $row){
    //TODO mach was damit
}

btw: Du solltes auf mysqli oder pdo umsteigen. mysql_* ist veraltet

Nachtrag: @tombe: stimmt, den FIELD() hab ich vergessen
 
Hi,

funktioniert so net.

Mit:
PHP:
"SELECT * FROM fragen WHERE id IN (".implode(',',$fragen_aktiv_1).") ORDER BY FIELD (id, ".implode(',',$fragen_aktiv_1).") "
bringt er gar nicht, heißt kein Ergebnis.

Selbst mit:
PHP:
"SELECT * FROM fragen WHERE id IN (".implode(',',$fragen_aktiv_1).") ORDER BY FIELD (id, '3','1','2','6','4','5') "

Bringt er nix.

In beiden Fällen nicht mal nen Error ( or die (mysql_error()) );
 
Lass dir mal den fertigen SQL-String mit echo am Bildschirm ausgeben. Sehe zwar nichts aber es wird wohl ein Fehler enthalten sein.
 
PHP:
SELECT * FROM fragen WHERE id IN (3,1) ORDER BY FIELD (id, '3','1')

Schaut doch eigentlich ok aus oder?

Wenn ich den ORDER BY Teil wieder rausschmeiße funktionierts halt ohne richtige Sortierung.
 
Zuletzt bearbeitet:
Nun wenn es nummerische Werte sind, kannst (musst ****) du die einfachen Anfürungszeichen weglassen.

Blöde Frage: Gibt es die Werte 1 und 3 auch wirklich?

Was passiert wenn du den "ORDER BY" Teil weglässt, geht es dann?
 
Ok nu hab ichs....
PHP:
SELECT * FROM fragen WHERE id IN (3,1) ORDER BY FIELD (id, '3','1')
PHP:
SELECT * FROM fragen WHERE id IN (3,1) ORDER BY FIELD(id, '3','1')

Das Leerzeichen nach FIELD muss weg......(*aufdieStirnklatsch*)
 
Ok, wenn das die Lösung war ist es ja gut.

Bei meinen Tests mit HeidiSQL spielte das Leerzeichen allerdings keine Rolle!
 
Und trotzdem währe ien Nummervergleich schöner
SQL:
... ORDER BY FIELD(id, 3, 1)
 
Zuletzt bearbeitet von einem Moderator:
Zurück