yr4ik Опубликовано 9 декабря, 2016 Жалоба Поделиться Опубликовано 9 декабря, 2016 FIELD(pc.category_id, ?@), p.position Сначала идет очередность категорий согласно переданному массиву идов категорий. Дальше товары которые совпадают по первому критерию (находятся в одной категории) сортируются по p.position (что есть позиция товара). Если у вас не так - то проверяйте что пишется в p.position Цитата Ссылка на сообщение Поделиться на другие сайты
daramal Опубликовано 9 декабря, 2016 Жалоба Поделиться Опубликовано 9 декабря, 2016 (изменено) Вы это имеете ввиду по p.position? case 'position': $order = 'p.position DESC'; Изменено 9 декабря, 2016 пользователем DarAmal Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 9 декабря, 2016 Жалоба Поделиться Опубликовано 9 декабря, 2016 Нет. Это нужно смотреть базу. Таблица s_products поле positionУ вас в админке в товарах нормально работает сортировка?Товары отображаются согласно заданному положению? Цитата Ссылка на сообщение Поделиться на другие сайты
daramal Опубликовано 9 декабря, 2016 Жалоба Поделиться Опубликовано 9 декабря, 2016 без этой доработки на сайте товары отображаются по тому, как задано в админке. Когда внес эту доработку, то на сайте товары все перемешались, т.е. они как бы идут по порядку ID, не так как бы я ранее перетаскивал товары в админке как нужно Цитата Ссылка на сообщение Поделиться на другие сайты
daramal Опубликовано 9 декабря, 2016 Жалоба Поделиться Опубликовано 9 декабря, 2016 У меня в БД так: Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 9 декабря, 2016 Жалоба Поделиться Опубликовано 9 декабря, 2016 киньте в личку доступ к админке сайта Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 9 декабря, 2016 Жалоба Поделиться Опубликовано 9 декабря, 2016 (изменено) Альтернативное решение для 15 поста: В api/Products.php ПЕРЕД строкой:if(!empty($filter['keyword'])) Добавляем://Если сортировка по позициям и задана категория if((empty($filter['sort']) || $filter['sort']=='position') && !empty($filter['category_id'])) $order = $this->db->placehold("FIELD(pc.category_id, ?@), p.position DESC", (array)$filter['category_id']); PS: больше ничего не нужно Изменено 10 декабря, 2016 пользователем yr4ik Цитата Ссылка на сообщение Поделиться на другие сайты
daramal Опубликовано 9 декабря, 2016 Жалоба Поделиться Опубликовано 9 декабря, 2016 Спасибо огромное Юрию за помощь Цитата Ссылка на сообщение Поделиться на другие сайты
Breedzel Опубликовано 22 августа, 2017 Жалоба Поделиться Опубликовано 22 августа, 2017 Добрый день.Нужна подсказка.Юзаю сортировку по-умолчанию вот такую: $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'; Она опускает товары нет в наличии вниз списка. Подскажите - как видоизменить, чтобы товар автоматически сортировало по названию, но в тоже время товар не в наличии опустился вниз. Цитата Ссылка на сообщение Поделиться на другие сайты
loxter Опубликовано 22 августа, 2017 Жалоба Поделиться Опубликовано 22 августа, 2017 (изменено) Пробуйте$order = '(SELECT 1 FROM s_variants pv WHERE p.id = pv.product_id AND (pv.stock>0 OR pv.stock IS NULL) LIMIT 1) DESC, p.name'; Изменено 22 августа, 2017 пользователем loxter Цитата Ссылка на сообщение Поделиться на другие сайты
Breedzel Опубликовано 22 августа, 2017 Жалоба Поделиться Опубликовано 22 августа, 2017 Работает, спасибо Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 22 августа, 2017 Жалоба Поделиться Опубликовано 22 августа, 2017 Пробуйте$order = '(SELECT 1 FROM s_variants pv WHERE p.id = pv.product_id AND (pv.stock>0 OR pv.stock IS NULL) LIMIT 1) DESC, p.name'; Для остальных сортировок это работать не будет, нужно бы точно расписать для каждой сортировки, а то выходит так что одно лечим другое калечим. Цитата Ссылка на сообщение Поделиться на другие сайты
loxter Опубликовано 23 августа, 2017 Жалоба Поделиться Опубликовано 23 августа, 2017 Спрашивающий задал вопрос весьма точно и квалифицированно "сортировку по-умолчанию вот такую ... как видоизменить".Думаю, можно смело предположить, что он использовал и прочие сортировки измененные под свои желания. Во всяком случае, он понимает, что делает.А если что-то у него пойдет не так (например, сломается сортировка в админке) и возникнут затруднения - он всегда сможет задать новый вопрос. Формально замечание правильное, но оно - впереди паровоза. С тем же успехом можно к этому вопросу цеплять усложнения типа - а какая версия (вдруг старая экзотическая), а какие изменения делались - от и до. Еще можно сказать - в версии 1 это вообще не работает. В общем, раздолье для подобного бюрократизма... Цитата Ссылка на сообщение Поделиться на другие сайты
Breedzel Опубликовано 23 августа, 2017 Жалоба Поделиться Опубликовано 23 августа, 2017 (изменено) Noxter прав, для остальных это не работает. Не обратил внимание, пока не написали.Подскажете?Стоит вот такая: if(!empty($filter['sort'])) switch ($filter['sort']) { case 'position': $order = 'p.position DESC'; break; // по имени от А до Я case 'name_asc': $order = 'p.name'; break; // по имени от Я до А case 'name_desc': $order = 'p.name DESC'; break; // по цене Низкие > Высокие case 'price_asc': $order = '(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; // по цене Высокие < Низкие case 'price_desc': $order = '(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) DESC'; break; case 'created': $order = 'p.created DESC'; break; case 'views': $order = 'p.views DESC'; break; } Изменено 23 августа, 2017 пользователем Breedzel Цитата Ссылка на сообщение Поделиться на другие сайты
Breedzel Опубликовано 24 августа, 2017 Жалоба Поделиться Опубликовано 24 августа, 2017 И кстати такой тип сортировки затрагивает также и админку Пробуйте $order = '(SELECT 1 FROM s_variants pv WHERE p.id = pv.product_id AND (pv.stock>0 OR pv.stock IS NULL) LIMIT 1) DESC, p.name'; Цитата Ссылка на сообщение Поделиться на другие сайты
МарияБ Опубликовано 25 ноября, 2018 Жалоба Поделиться Опубликовано 25 ноября, 2018 Нужна реализация данной доработки. По срокам завтра до обеда. Кто-нибудь может заняться? Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.