Hi,
Folgende einfache Abfrage bringt mich zum verzweifeln.
SELECT * FROM TAB WHERE ID IN(1,2,5,8,3,2,2,1)
Diese Abfrage listet jede vorhandene ID aus der Liste einmal auf. Ich möchte aber ein Resultat mit allen IDs in einer Liste mit der gleichen Reihenfolge.
Ist das möglich?
Ja, ist es:
CREATE TEMPORARY TABLE foo (ord int, id int);
INSERT INTO foo VALUES (0,1),(1,2),(2,5),(3,8),(4,3),(5,2),(6,2),(7,1);
SELECT spalten FROM tab
RIGHT JOIN foo USING (id)
ORDER BY foo.ord ASC
Es wird eine temporäre Tabelle erzeugt (die wieder verworfen wird, sobald die Verbindung beendet wird), in die die gesuchten IDs in vorgegebener Ordnung eingefügt werden.
Anschließend wird sie per RIGHT JOIN an die eigentliche „Ziel“-Tabelle tab
rangejoint, so dass für jeden Datensatz aus der temporären Tabelle ein Datensatz im Ergebnis landet. Und das ganze wird dann noch nach der vorgegebenen Ordnung sortiert.
Die INSERT INTO
-Zeile per Script dynamisch zu erzeugen, dürfte kein Problem sein.
Ob das gesamte Vorgehen allerdings gegenüber dem bereits erfolgten Vorschlag, das ganze einfach nach der „normalen“ SELECT … WHERE id IN()
-Query per Script zusammen zu würfeln, in dem du einmal über deine vorgegebenen IDs loopst, irgendeinen nennenswerten Vorteil bietet … das bleibt dahingestellt :-)
MfG ChrisB
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?