#sqlite
Вопрос:
Я могу использовать
SELECT * FROM table
WHERE id IN (478,278,190,890,123)
чтобы вернуть список записей.
Как я могу поручить SQLite возвращать записи, отсортированные в порядке, указанном в списке?
Ответ №1:
Для этого нет специальной инструкции. Вы должны найти решение для каждого случая.
В вашем примере вы можете сделать это так:
SELECT *
FROM table
WHERE id IN (478,278,190,890,123)
ORDER BY CASE id WHEN 478 THEN 0
WHEN 278 THEN 1
WHEN 190 THEN 2
WHEN 890 THEN 3
WHEN 123 THEN 4
END
Но если у вас длинный список идентификаторов, его будет трудно поддерживать.
Комментарии:
1. Спасибо. Лучший ответ на данный момент. Да, если список длинный, то запрос будет огромным. Давайте посмотрим, может ли кто-нибудь еще придумать более простое решение.
2. Откуда берется порядок этих идентификаторов? Это всегда одно и то же? т. е.: например, 478 всегда перед 278 во всех ваших запросах.
3. На данный момент порядок идентификаторов определяется конфигурационным файлом (который, вероятно, будет меняться раз в неделю), но в конечном итоге он будет зависеть от выбора пользователя. Вероятно, мне лучше отсортировать строки в приложении. Спасибо за вашу помощь.
4. Да, в вашем случае лучше выполнить сортировку в приложении.
Ответ №2:
вы можете использовать порядок по имени поля. В этом я предполагаю, что идентификатор select * from table where id in (478,278,190,890,123) order by id
Комментарии:
1. Нет. «заказ по идентификатору» даст мне 123 190 278 478 890. Я хочу, чтобы заказ был 478,278,190,890,123.
2. Вы можете использовать
order by id DESC