Как отсортировать объекты так, что б часть из них (по условию) всегда была в конце?

Есть товары. У товаров есть цены. Товары можно сортировать по разным условиям. Выводить постранично.
Как сделать так, что б те товары, цена которых равна нулю, всегда были в конце ?

За какое-то время не пришло в голову никаких работающих решений, кроме как собрать массив и постранично выводить уже массив.

Но кажется, что должна быть возможность сделать это и на уровне выборки
  • Вопрос задан
  • 2405 просмотров
Пригласить эксперта
Ответы на вопрос 3
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Вариант 1
SELECT .... WHERE price > 0 AND ... ORDER BY ...
UNION
SELECT .... WHERE price = 0 AND ... ORDER BY ...


Вариант 2
SELECT ... IF (price > 0, 1, 0) as has_price  ... ORDER BY has_price  DESC ...


Вариант 3
Аналогичен варианту 2, но has_price хранить явно в базе

PS Считаю что самый правильный 3й
Ответ написан
nulldef
@nulldef
Senior Software Developer
SELECT * FROM goods .... ORDER BY <ваша выборка>, price DESC
Ответ написан
AxisPod
@AxisPod
Добавить поле говорящее о наличие цены, ибо != 0 будет очень плохо, индекс тут не работает. Взять у DmitriyEntelis решение и добавить проверку на это поле в 1м варианте в 1й запрос.
Ответ написан
Ваш ответ на вопрос

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

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