Jag trodde inte att detta var möjligt, men hittade ett blogginlägg här som verkar göra den typ av sak du är ute efter:
SELECT id FROM table WHERE id in (7,2,5,9,8)
ORDER BY FIND_IN_SET(id,"7,2,5,9,8");
ger olika resultat till
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
returnerar positionen för id
i det andra argumentet som ges till det, så för det första fallet ovan, id
av 7 är på position 1 i setet, 2 vid 2 och så vidare - mysql fungerar internt ungefär som
id | FIND_IN_SET
---|-----------
7 | 1
2 | 2
5 | 3
sorteras sedan efter resultaten av FIND_IN_SET
.