Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL ordina in base a un elenco

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