- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Люди, хелп! Вроде на первый взгляд простая задача, но чего-то никак не получается. Надо организовать сортировку товара по цене, при этом чтобы товары с изображениями выдавались вначале, т.е. типа ORDER BY одновременно по 2-м полям. Если сортировать так: ORDER BY img DESC, price DESC - изображения впереди оказываются, но не отсортированные по цене. Пробовал через UNION
(SELECT * FROM prod WHERE (count>0 and price>0 and img<>'') ORDER BY price DESC) - так сортирует по цене
(SELECT * FROM prod WHERE (count>0 and price>0 and img<>'') ORDER BY price DESC) UNION (SELECT * FROM prod WHERE (count>0 and price>0 and img='')) LIMIT 0,12 - а так уже нет.
Неужели это можно сделать только используя временную таблицу?
ORDER BY price DESC , img DESC
Кароче всё перетёр прошлое, вот:
ORDER BY `таблица`.`поле` ASC, `таблица`.`поле` DESC
MOP1, в таком варианте сортирует только по цене, а на картинки забивает
ORDER BY `таблица`.`поле` ASC, `таблица`.`поле` DESC
ORDER BY img DESC, price DESC - изображения впереди оказываются, но не отсортированные по цене.
ORDER BY img, price DESC - по цене сортирует, но изображения сзади.
А разница какая, с написанным выше, если таблица одна?
Попробуйте так.
Я понял как, но нужно вспомнить;) передаю смысл:
SELECT price, STRCMP('', img) AS have_image FROM prod WHERE price>0 ORDER BY have_image ASC, price DESC;
Вся фишка вот в этом: STRCMP('', img) AS have_image, а потом по have_image можно как нужно сортировать.
STRCMP('', img) должно для пустого поля вернуть 1, а для позиции с картинкой должно вернуть -1. Вот по этому значению параметра и сортируем.
Если по ASC, то вверху будут те позиции у которых есть картинки. Они будут сортироваться по цене. Потом пойдут те у которых нет картинок и тоже будут сортироваться по цене.
Вместо STRCMP('', img) можно и другую какунидь функцию похожую, которая возвращает true или false в случае совпадения и не совпадения значений '' (пустая строка) с img
А как сортировать в ORDER BY это уж как пожелаете.
Вроде правильно всё описал. Удачи.
---
Нашёл похожую функцию, которую тоже можно применить IF(img<>'', 1, 0) - должна возвращать 1, если картинка есть, и 0 если картинки нет. Нужно проверить как будет реагировать на значение NULL в поле img
Попробуйте так.
Работает. :) Почему, не могу понять, и как вообще воспринимать эту конструкцию ORDER BY img='', но работает!
Я понял как, но нужно вспомнить;) передаю смысл:
SELECT price, STRCMP('', img) AS have_image FROM prod WHERE price>0 ORDER BY have_image ASC, price DESC;
Вся фишка вот в этом: STRCMP('', img) AS have_image, а потом по have_image можно как нужно сортировать.
STRCMP('', img) должно для пустого поля вернуть 1, а для позиции с картинкой должно вернуть -1. Вот по этому значению параметра и сортируем.
Если по ASC, то вверху будут те позиции у которых есть картинки. Они будут сортироваться по цене. Потом пойдут те у которых нет картинок и тоже будут сортироваться по цене.
Вместо STRCMP('', img) можно и другую какунидь функцию похожую, которая возвращает true или false в случае совпадения и не совпадения значений '' (пустая строка) с img
А как сортировать в ORDER BY это уж как пожелаете.
Вроде правильно всё описал. Удачи.
---
Нашёл похожую функцию, которую тоже можно применить IF(img<>'', 1, 0) - должна возвращать 1, если картинка есть, и 0 если картинки нет. Нужно проверить как будет реагировать на значение NULL в поле img
А это вообще очень эллегантное решение и красивое решение! Dreammaker и DyaDya большое спасибо!
и как вообще воспринимать эту конструкцию ORDER BY img=''
ну как: поставить все строки, которые содержат опредёленное значение в конец :)
update: собственно, мы сортируем по очереди, сначала первое правило, которое сортирует по содержание/отсуствию определённого значения, а затем уже по второму - по цене.
ну как: поставить все строки, которые содержат опредёленное значение в конец :)
update: собственно, мы сортируем по очереди, сначала первое правило, которое сортирует по содержание/отсуствию определённого значения, а затем уже по второму - по цене.
Спасибо за комментарий! Первый раз такое вижу в ORDER BY :)
Ещё может быть полезна вот такая конструкция:
ORDER BY field IN (1, 2) DESC
Если мы хотим например, поднять какие-то товары вверх. Или же какие-то категории объявлений в доске объявлений являются привелегированными и должны показываться первыми.