Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL sortiert nach einer Liste

Seit 1 <3 <77 <123 , eine einfache ORDER BY id würde genügen.

Wenn Sie jedoch so bestellen möchten:77, 3, 123, 1 , dann könnten Sie die Funktion FELD() :

SELECT id, name
FROM mytable 
WHERE id IN (77, 3, 123, 1) 
ORDER BY FIELD(id, 77, 3, 123, 1)

Wenn Ihre Abfrage mit mehr Zeilen übereinstimmt, als Sie in FIELD auflisten

FELD gibt 0 zurück wenn eine Zeile mit keiner der von Ihnen aufgelisteten IDs übereinstimmt, d. h. eine Zahl, die kleiner ist als die für die aufgelisteten IDs zurückgegebenen Zahlen. Das bedeutet, wenn Ihre Abfrage mit mehr Zeilen übereinstimmt als die, die Sie auflisten, werden diese Zeilen zuerst angezeigt. Zum Beispiel:

SELECT id, name
FROM mytable 
WHERE id IN (77, 3, 123, 1, 400) 
ORDER BY FIELD(id, 77, 3, 123, 1)

In diesem Beispiel die Zeile mit der ID 400 erscheint zuerst. Wenn Sie möchten, dass diese Zeilen zuletzt erscheinen, kehren Sie einfach die Liste der IDs um und fügen Sie DESC hinzu :

SELECT id, name
FROM mytable 
WHERE id IN (77, 3, 123, 1, 400) 
ORDER BY FIELD(id, 1, 123, 3, 77) DESC