Eridani
@Eridani
Мимо проходил

ORDER BY IF — сортировка по двум полям?

Добрый день.

Лист товаров.
Нужно сделать сортировку следующего вида
1) Наличие фото + Цена
2) Фото
3) Цена

Вот с первым у меня проблемы (он и представлен в query order), оба вместе не хотят работать, хотя по отдельности все пашет хорошо.
При такой конструкции показываются все фото сначала, но где то в середине или в других местах, цены может не быть, но последующие товары опять идут с ценой. Дырки такие.
Не понимаю, как сие поправить
$query_order = "IF((COUNT( `mf`.`ID`) AND `a`.`Price` > 0), 1, 0) DESC";
$query_group = "`a`.`Message_ID`";
$query_join = "LEFT JOIN `Multifield` as `mf` ON (`mf`.`Message_ID` = `a`.`Message_ID` AND `mf`.`Field_ID` = 2341)";
  • Вопрос задан
  • 100 просмотров
Решения вопроса 2
Eridani
@Eridani Автор вопроса
Мимо проходил
Решено.
Условие портило проверка COUNT
Верный рабочий результат
SELECT `a`.`Message_ID`, `a`.`Price`, `mf`.`Path` FROM `Message2000` AS `a` LEFT JOIN `Multifield` AS `mf` ON (`mf`.`Message_ID` = `a`.`Message_ID` AND `mf`.`Field_ID` = 2341) ORDER BY IF((mf.ID AND a.Price > 0), 1, 0) DESC, mf.ID DESC, a.Price DESC
Ответ написан
erge
@erge
Примус починяю
мне кажется что группировка только ради count ? тогда не должно быть price, а sum(price)
а вообще проверку картинки надо делать другим образом.
вы же делаете LEFT JOIN , соответственно из картинок присоединяются те что есть, а к тем записям с прайсами где нет картинок будут NULL записи картинок.
соответственно проверять надо :
IF((`mf`.`ID` IS NOT NULL AND `a`.`Price` > 0), 1, 0) DESC

без группировок
соответственно если есть запись в картинках (ID != null) и прайс > 0, то IF вернет 1 , в иных случаях 0
и по этим 1 и 0 произведется обратная сортировка.
т.е. сверху как раз должны быть записи с ценой и картинками.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы