weranda
@weranda

Как сохранить порядок номеров в запросе?

Есть простой запрос выбора:
SELECT * FROM table WHERE id IN (7, 8, 5, 4, 1);
Запрос нормально возвращает данные, отсортированные по id: 1,4,5,7,8.
Мне нужно сделать так, чтобы запрос возвращал данные по id в том порядке, который указан в скобках: 7, 8, 5, 4, 1.
  • Вопрос задан
  • 120 просмотров
Решения вопроса 2
@Akina
Сетевой и системный админ, SQL-программист.
SELECT * 
FROM table 
WHERE id IN (7, 8, 5, 4, 1)
ORDER BY FIND_IN_SET(id, '7,8,5,4,1');
Ответ написан
Комментировать
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
Пригласить эксперта
Ответы на вопрос 2
@MrColdCoffee
web
SELECT * FROM table WHERE id IN (7, 8, 5, 4, 1)
ORDER BY CASE id
WHEN 7 THEN 1
WHEN 8 THEN 2
WHEN 5 THEN 3
WHEN 4 THEN 4
WHEN 1 THEN 5
END;
Ответ написан
@alexalexes
Припаркую свой велик.
Из in нельзя вытащить сведения о порядке, он просто дает ответ "включает" или "не включает" в себя значение.
Если СУБД позволяет, то для сеанса создаете временную таблицу, где добавляете все необходимые атрибуты (в данном случае порядок записей), и пользуетесь ей. Если не позволяет, то всегда можно написать подзапрос и он тоже будет работать почти как временная таблица:
SELECT *
  FROM table
  join (select 1 id, 7 val union
          select 2, 8 union
          select 3, 5 union
          select 4, 4 union
          select 5, 1)  tmp on table.id = tmp.val
order by tmp.id
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы