@newked

Как написать SQL запрос сортировки товара по цене с учетом наличия товара?

Hello, world!
Ребят помогите плиз соорудить правильный SQL запрос

Скажем так ... есть таблица товаров. Мне надо вывести записи в такой последовательности:
Надо вывести список товара стоимость которого ниже 299 руб. и все бы замечательно если бы не одно но!
Есть товар который "ЕСТЬ В НАЛИЧИИ", а есть товар которого "НЕТ В НАЛИЧИИ"
И вот мне надо вывести товар в такой последовательности:
1. Должно быть выведено 15 записей всего.
2. Сначала вывести товар который есть в наличии и отсортировать его по цене по убыванию, а потом вывести товар которого нет в наличии и точно также отсортировать его по цене по убыванию.

Как я попытался решить:
(SELECT user_f_5, user_f_88 FROM sb_plugins_1 WHERE user_f_5 <= 299 AND p_active = 1 AND user_f_88 = 'ready' ORDER BY user_f_5 DESC)
UNION
(SELECT user_f_5, user_f_88 FROM sb_plugins_1 WHERE user_f_5 <= 299 AND p_active = 1 AND user_f_88 = 'nonal' ORDER BY user_f_5 DESC)
LIMIT 15

Результат почти такой, который мне нужен, за исключением таблицы которая приклеилась со статусом "НЕТ В НАЛИЧИИ":
60b89a49f1d1a025329804.jpeg
Т.е. товар который есть в наличии он отсортировал правильно, а вот товар которого нет в наличии он отсортировал как-то странно хаотично.
Где я ошибся? Или может я в корне не правильно написал SQL запрос?
  • Вопрос задан
  • 612 просмотров
Решения вопроса 2
rozhnev
@rozhnev Куратор тега SQL
Fullstack programmer, DBA, медленно, дорого
Делаем одним запросом
SELECT user_f_5, user_f_88 
FROM sb_plugins_1 
WHERE user_f_5 <= 299 AND p_active = 1 AND user_f_88 IN ('ready','nonal') 
ORDER BY user_f_88 = 'ready' DESC, user_f_5 DESC
LIMIT 15
Ответ написан
@newked Автор вопроса
Я не правильно написал запрос.
Использовать UNION тут неуместно, достаточно сделать сортировку по двум полям:
SELECT user_f_5, user_f_88 FROM sb_plugins_1 WHERE user_f_5 <= 299 AND p_active = 1 AND user_f_88 = "ready" OR user_f_88 = "nonal" ORDER BY user_f_88 DESC, user_f_5 DESC LIMIT 15

Это решает мою проблему, но если у вас есть что добавить .... буду только рад)))
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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