Я не думал, что это было возможно, но нашел здесь запись в блоге , которая, кажется, делает то, что вам нужно:
SELECT id FROM table WHERE id in (7,2,5,9,8)
ORDER BY FIND_IN_SET(id,"7,2,5,9,8");
даст разные результаты для
SELECT id FROM table WHERE id in (7,2,5,9,8)
ORDER BY FIND_IN_SET(id,"8,2,5,9,7");
<a href="http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set" rel="noreferrer">FIND_IN_SET</a>
возвращает позицию id
во втором заданном ей аргументе, поэтому для первого случая выше, id
из 7 находится в позиции 1 в наборе, 2 в 2 и так далее - mysql внутри получается что-то вроде
id | FIND_IN_SET
---|-----------
7 | 1
2 | 2
5 | 3
затем заказывает по результатам FIND_IN_SET
.