SQLite — возвращает отсортированный список

#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