Vinzenz Mai: SQL Abfrage sortieren

Beitrag lesen

Hallo Stefan,

Hallo, wahrscheinlich gibts für mein Problem eine recht simple Lösung, jedoch komm ich allein irgendwie nicht drauf...

das hängt davon, was Du unter "simpel" verstehst.

Ich habe in PHP ein Array mit IDs und will anschließend eine DB nach diesen IDs abfragen. Dazu wandle ich den Array per implode in einen String.

"SELECT * FROM ".CPO_NEWS." WHERE nr IN (22,12,3)"

Soweit kein Problem. Nun möchte ich aber das das Resultat aus der SQL-Abfrage der Reihenfolge des Arrays entspricht, und nicht der Reihenfolge wie die IDs in der DB sortiert sind.

Du benötigst dazu eine Hilfsspalte, nach der sortiert werden kann. Dazu kannst Du CASE ... WHEN nutzen, z.B. in diesem Fall:

SELECT  
    *,                  -- SELECT * vermeide ich so gut es geht.  
    sortierung =        -- unsere Hilfsspalte, die für die Sortierung da ist  
    CASE nr  
        WHEN 22 THEN 0  -- erster Arraywert, kleinster Spaltenwert  
        WHEN 12 THEN 1  
        WHEN 3 THEN 2   -- letzter Arraywert, höchster Spaltenwert  
    END  
FROM CPO_NEWS  
WHERE nr IN (22, 12, 3)  
ORDER BY sortierung

liefert im Falle von Transact-SQL, dem SQL-Dialekt des MS SQL-Server das
von Dir gewünschte Resultat. Gegebenenfalls müsstest Du es an den Dialekt,
den Dein Datenbankmanagementsystem (DBMS) versteht, anpassen.

Du solltest jedenfalls sehen, dass Du auch die CASE-Anweisung bequem mittels implode zusammenbauen kannst.

Freundliche Grüße

Vinzenz