Enhill Опубликовано 21 января, 2014 Жалоба Поделиться Опубликовано 21 января, 2014 Есть сортировка "по цене", которая перемещает вниз все товары, которых нет в наличии $order = 'IF((SELECT COUNT(*) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1), 1, 0) DESC, (SELECT pv.price FROM __variants pv WHERE (pv.stock IS NULL OR pv.stock>0) AND p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1)'; Сортировка работает отлично Вопрос: Как сделать сортировку "по умолчанию", которая также перемещает отсутствующие товары вниз списка, но сохраняет свои функции? Цитата Ссылка на сообщение Поделиться на другие сайты
Enhill Опубликовано 22 января, 2014 Автор Жалоба Поделиться Опубликовано 22 января, 2014 Набросал вот такой вариант:api/Products.php case 'position': $order = '(SELECT p.position FROM __variants pv WHERE (p.position IS NULL OR pv.stock>0) AND p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1) DESC'; break; Сортировка остается по умолчанию (как мы указали в админке), но все товары с 0 количеством на складе, перемещает вниз списка. Код работает, но может можно сделать лучше? Уважаемые знатоки, хочется услышать ваше мнение. Заранее спасибо Цитата Ссылка на сообщение Поделиться на другие сайты
Enhill Опубликовано 22 января, 2014 Автор Жалоба Поделиться Опубликовано 22 января, 2014 Спасибо! Убрал лишнее. Все равно не могу понять, при каком сценарии это будет работать неправильно? $order = '(SELECT p.position FROM __variants pv WHERE p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1)DESC'; Цитата Ссылка на сообщение Поделиться на другие сайты
Сергей Бойко Опубликовано 4 февраля, 2014 Жалоба Поделиться Опубликовано 4 февраля, 2014 Подскажите пожалуйста куда именно вставлять или что-то заменить? Вот мой код с файла products.php: if(!empty($filter['sort'])) switch ($filter['sort']) { case 'position': $order = 'p.position'; if ($filter['orderby'] == "asc"){$order1='';} break; case 'name': $order = 'p.name'; break; case 'price': $order = 'IF((SELECT COUNT(*) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1), 1, 0) DESC, (SELECT pv.price FROM __variants pv WHERE (pv.stock IS NULL OR pv.stock>0) AND p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1)'; break; Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.