Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Независимая сортировка в каждом запросе UNION (SQL)

touhou Профи (616), закрыт 5 лет назад
Есть нерабочий запрос следующего вида:
SELECT * FROM comments WHERE id_seller = '$id' AND status = 2 ORDER BY id DESC
UNION
SELECT * FROM comments WHERE id_seller = '$id' AND status <> 2 ORDER BY id DESC
Задача: получить сначала комментарии со статусом 2!, а потом все остальные и отсортировать их по убыванию. Если убрать ORDER BY, то все сработает, правда сортировка нужна по убыванию.
Лучший ответ
Аглая Шниц Искусственный Интеллект (138155) 5 лет назад
можно попробовать нерабочий запрос следующего вида
SELECT
case when status = 2 then 1 else 2 end,
c.id,
c.*
FROM
comments c
WHERE
id_seller = '$id'
ORDER BY
1,
2 DESC
Остальные ответы
Андрей Высший разум (425818) 5 лет назад
А что мешает сортировать сразу по статусу без UNION?

SELECT * FROM comments WHERE id_seller = '$id' ORDER BY status <> 2, id DESC

или

SELECT *, status <> 2 AS ordr FROM comments WHERE id_seller = '$id' ORDER BY ordr, id DESC

В твоём же случае последний ORDER BY относится не ко второй части UNION, а ко всему UNION после объединения данных.

Попробуй:

(SELECT * FROM comments WHERE id_seller = '$id' AND status = 2 ORDER BY id DESC)
UNION
(SELECT * FROM comments WHERE id_seller = '$id' AND status <> 2 ORDER BY id DESC)

может быть и сработает.
Похожие вопросы