Je ne pensais pas que c'était possible, mais j'ai trouvé une entrée de blog ici qui semble faire le genre de chose que vous recherchez :
SELECT id FROM table WHERE id in (7,2,5,9,8)
ORDER BY FIND_IN_SET(id,"7,2,5,9,8");
donnera des résultats différents à
SELECT id FROM table WHERE id in (7,2,5,9,8)
ORDER BY FIND_IN_SET(id,"8,2,5,9,7");
FIND_IN_SET
renvoie la position de id
dans le deuxième argument qui lui est donné, donc pour le premier cas ci-dessus, id
de 7 est à la position 1 dans l'ensemble, 2 à 2 et ainsi de suite - mysql fonctionne en interne quelque chose comme
id | FIND_IN_SET
---|-----------
7 | 1
2 | 2
5 | 3
puis trie par les résultats de FIND_IN_SET
.