Вход • Регистрация

Фильтр, характеристики, И/ИЛИ

  • 20 апреля 2018 г.
  • В поиск выводится несколько характеристик с множественным выбором. При выборе в фильтре нескольких значений одной характеристики результаты фильтруются по логике ИЛИ, то есть если совпадает любое из значений. Если же выбрать несколько значений из РАЗНЫХ характеристик, то результаты фильтруются по логике И, то есть если совпадают оба значения.

    Задача состоит в том, чтобы сделать при выборе значений из определенных характеристик (внутри группы характеристик) результаты выводились принципу ИЛИ.

    Сформулирую пример для сайта с одеждой, выбрали в фильтре:

    1. размеры 48, 50
    2. Тип одежды: Брюки
    3. Дизайн: Под джинсу
    4. Цвет: Синий, Голубой

    Результат получили: "размеры 48 или 50" И "Брюки" И "Под джинсу ИЛИ Синий ИЛИ Голубой"

    К сожалению у поискового фильтра для характеристик поиск сделан не через OR/AND, а через INNER JOIN (OR/AND только для галочек).

    Было решение -- объединить две характеристики в одну, условно говоря получить много вариаций на тему "Голубые джинсы", "Синие Джинсы" и т.д. Но 6-ка диафана отказывается выводить значения в фильтр, видимо слишком много (около 150), если кто-то знает как снять это ограничение - тоже вариант для нас.

    Буду рад полезным советам.

    p.s. скуль не умеет "FULL OUTER JOIN", но вариант переходить на Postage из-за этого не рассматриваем :)
    • 21 апреля 2018 г.
    • На самом деле FULL OUTER JOIN можно эмитировать через UNION двух запросов в MySQL.
      Например есть пример тут
      Согласен выглядит страшновато, но "на безрыбье и рак рыба".
    • 23 апреля 2018 г.
    • На самом деле решений множество.

      В public function list_search() приходит $_POST с параметрами запроса. Как вариант, можно сформировать не один запрос для всех задействованных характеристик, как в дефолте, и получить INNER JOIN между ними, а сформировать запрос для каждой характеристики в отдельности. То есть получите несколько запросов к базе данных. Далее остается просто объединить полученные результирующие ряды, исключая повторения элементов. На выходе получите тот же FULL JOIN. Таким образом все это можно прокрутить в public function list_search(), не внося каких-либо серьезных изменений в код, что позволит в дальнейшем спокойно обновлять cms без каких либо усилий.

Новости

  • 18 июня
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 

Форум