Nie sądziłem, że to możliwe, ale znalazłem wpis na blogu wydaje się, że robi to, czego szukasz:
SELECT id FROM table WHERE id in (7,2,5,9,8)
ORDER BY FIND_IN_SET(id,"7,2,5,9,8");
da różne wyniki
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
zwraca pozycję id
w drugim podanym argumencie, więc w pierwszym przypadku powyżej, id
z 7 jest na pozycji 1 w zestawie, 2 na 2 i tak dalej - mysql wewnętrznie działa coś w stylu
id | FIND_IN_SET
---|-----------
7 | 1
2 | 2
5 | 3
następnie zamówienia według wyników FIND_IN_SET
.