Попробуйте использовать ORDER BY FIELD (id, ...)
:
SELECT *
FROM events
WHERE id IN (4, 5, 9, 11)
ORDER BY FIELD (id, 11, 4, 9, 5)
Демо
Почему ваш текущий запрос показывает порядок 4,5,9,11
даже без использования явного предложения ORDER BY
одно из объяснений состоит в том, что столбец id
является кластеризованным первичным ключом для вашей таблицы.В этом случае данные фактически будут храниться в этом порядке на диске, и при выборе это будет естественный порядок возврата.
Редактировать:
На другомПоставщики баз данных, которые не поддерживают FIELD
, мы можем заказать, используя выражение CASE
:
SELECT *
FROM events
WHERE id IN (4, 5, 9, 11)
ORDER BY
CASE WHEN id = 11 THEN 1
WHEN id = 4 THEN 2
WHEN id = 9 THEN 3
WHEN id = 5 THEN 4
ELSE 5 END;