Делаю фильтр товаров по свойствам, приходит к тому, что пишу дополнительное условие (код атрибута равен X и значение атрибута = Y И код другого атрибута из той же таблицы равен Z и значение атрибута равно I)
(
AND ((`lists_items`.`slug`='biglist') AND (`parameters`.`slug`='list-size'))
AND - !его заменял на OR
((`lists_items`.`slug` IN ('black', 'green')) AND (`parameters`.`slug`='tea-type'))
)
где lists_items - это элементы списка, из которых выбираются значения свойств
parameters - это сущность для параметра товара
products_parameters - это сущность для значений параметра товара, здесь связывается возможное значение атрибута из lists_items и товар из products
products - таблица с товарами
*Если заменяю отмеченный AND на OR - находит Или товары по одному свойству, или по другому. Но с AND не находит НИЧЕГО. Хотя есть товары, которые соответствуют обоим критериям - то есть есть товары, у которых имеются оба свойства и одно из переданных значений.
Весь запрос ниже (biglist - значение свойства list-size, а black и green - значения параметра tea-type).
SELECT * FROM `products` LEFT JOIN `sub_sections` ON `products`.`subsection_id` = `sub_sections`.`id`
LEFT JOIN `products_parameters` ON `products`.`id` = `products_parameters`.`product_id`
LEFT JOIN `lists_items` ON `products_parameters`.`list_item_id` = `lists_items`.`id`
LEFT JOIN `parameters` ON `products_parameters`.`parameter_id` = `parameters`.`id`
WHERE (`sub_sections`.`slug`='first_sub')
AND (((`lists_items`.`slug`='biglist') AND (`parameters`.`slug`='list-size'))
AND ((`lists_items`.`slug` IN ('black', 'green')) AND (`parameters`.`slug`='tea-type')))
Пишу на Yii2, поэтому объяснение сразу в ActiveQuery - тоже очень поможет.
Если AND, котрый я указал заменить на OR - находит верно - то есть или свойство такое-то имеет значение такое-то, или совпадает иное свойство с иным значением. Но мне нужно, чтобы совпадения были по всем свойствам, поэтому пишу AND. И вот тут у меня всегда пустой результат. Отчего это может быть? Какой запрос в итоге нужен? Убил на это весь день.