Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL trier par une liste

Depuis 1 < 3 < 77 < 123 , un simple ORDER BY id suffirait.

Si toutefois vous souhaitez commander de cette façon :77, 3, 123, 1 , alors vous pouvez utiliser la fonction FIELD() :

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

Si votre requête correspond à plus de lignes que vous n'en listez dans FIELD

FIELD renvoie 0 lorsqu'une ligne ne correspond à aucun des identifiants que vous listez, c'est-à-dire un nombre inférieur aux nombres renvoyés pour les identifiants répertoriés. Cela signifie que si votre requête correspond à plus de lignes que celles que vous avez répertoriées, ces lignes apparaîtront en premier. Par exemple :

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

Dans cet exemple, la ligne avec l'ID 400 apparaîtra en premier. Si vous souhaitez que ces lignes apparaissent en dernier, inversez simplement la liste des identifiants et ajoutez DESC :

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