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