Da 1 < 3 < 77 < 123
, un semplice ORDER BY id
basterebbe.
Se, invece, vuoi ordinare in questo modo:77, 3, 123, 1
, puoi usare la funzione FIELD()
:
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1)
ORDER BY FIELD(id, 77, 3, 123, 1)
Se la tua query corrisponde a più righe di quelle elencate in FIELD
FIELD
restituisce 0
quando una riga non corrisponde a nessuno degli ID elencati, ovvero un numero inferiore ai numeri restituiti per gli ID elencati. Ciò significa che, se la tua query corrisponde a più righe di quelle elencate, quelle righe verranno visualizzate per prime. Ad esempio:
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1, 400)
ORDER BY FIELD(id, 77, 3, 123, 1)
In questo esempio, la riga con ID 400
apparirà per primo. Se vuoi che quelle righe appaiano per ultime, inverti semplicemente l'elenco degli ID e aggiungi DESC
:
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1, 400)
ORDER BY FIELD(id, 1, 123, 3, 77) DESC