Несколько WHERE ... AND ... для многие-ко-многим

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
CyanoFresh
Сообщения: 68
Зарегистрирован: 2015.02.05, 23:50
Контактная информация:

Несколько WHERE ... AND ... для многие-ко-многим

Сообщение CyanoFresh »

Здравствуйте. Есть такая структура БД:

Изображение

Получилось сделать выборку с одним WHERE AND:

Код: Выделить всё

SELECT `product`.* 
FROM `product` 
LEFT JOIN `product_parameter_value` ON `product`.`id` = `product_parameter_value`.`product_id` 
LEFT JOIN `parameter_value` ON `product_parameter_value`.`parameter_value_id` = `parameter_value`.`id` 
WHERE (`product`.`status`=10) 
AND ((`parameter_value`.`id`=9) AND (`parameter_value`.`parameter_id`=3)) 
AND (`product`.`category_id`=3) 
LIMIT 20
А вот если пользователь выбирает еще один параметр, то есть появляется еще один WHERE AND, уже не может найти записи (0):

Код: Выделить всё

SELECT COUNT(*) 
FROM `product` 
LEFT JOIN `product_parameter_value` ON `product`.`id` = `product_parameter_value`.`product_id` 
LEFT JOIN `parameter_value` ON `product_parameter_value`.`parameter_value_id` = `parameter_value`.`id` 
WHERE (`product`.`status`=10) 
AND ((`parameter_value`.`id`=4) AND (`parameter_value`.`parameter_id`=2)) 
!!!AND ((`parameter_value`.`id`=9) AND (`parameter_value`.`parameter_id`=3))!!!
AND (`product`.`category_id`=3)
Записи точно существуют, по одиночке все находит

Может я не до конца понимаю, но должно выбирать product у которого есть и тот parameter_value и другой. Для чего это все: фильтр товаров в каталоге
Подскажите, что делать, пожалуйста
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Несколько WHERE ... AND ... для многие-ко-многим

Сообщение caHek2x »

потому что как он вам одновременно будет и id 4 и id 9

Код: Выделить всё

WHERE (`product`.`status`=10) 
AND 
(
   (
      (`parameter_value`.`id`=4) AND (`parameter_value`.`parameter_id`=2)
   ) 
   OR
   (
      (`parameter_value`.`id`=9) AND (`parameter_value`.`parameter_id`=3)
   )
)
Аватара пользователя
CyanoFresh
Сообщения: 68
Зарегистрирован: 2015.02.05, 23:50
Контактная информация:

Re: Несколько WHERE ... AND ... для многие-ко-многим

Сообщение CyanoFresh »

caHek2x писал(а): 2017.06.29, 02:01 потому что как он вам одновременно будет и id 4 и id 9

Код: Выделить всё

WHERE (`product`.`status`=10) 
AND 
(
   (
      (`parameter_value`.`id`=4) AND (`parameter_value`.`parameter_id`=2)
   ) 
   OR
   (
      (`parameter_value`.`id`=9) AND (`parameter_value`.`parameter_id`=3)
   )
)
спасибо, так работает.
Возможно ли выбирать товары, которые имеют эти параметры одновременно? Понятно, что id не может быть разным одновременно, но может можно подсказать mysql, чтобы сравнивал эти id не в одной записи, а в многих?
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Несколько WHERE ... AND ... для многие-ко-многим

Сообщение caHek2x »

я не понимаю чего вы хотите ... я ваш код исправил теперь он работает так как вы хотите ...

upd: ааа ... кажется понял ... вам надо те товары которые имеют два нужных параметра .. ?!
ну тогда или два join или вложенный запрос или вообще отдельными запросами достать и отфильтровать ... или может кто еще вариантов накинет ...
Аватара пользователя
CyanoFresh
Сообщения: 68
Зарегистрирован: 2015.02.05, 23:50
Контактная информация:

Re: Несколько WHERE ... AND ... для многие-ко-многим

Сообщение CyanoFresh »

Dima1987 писал(а): 2017.06.29, 09:38GROUP BY
можно пример запроса?
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Несколько WHERE ... AND ... для многие-ко-многим

Сообщение caHek2x »

да кстати можно попробовать group by product.id и having count(*)==2
Ответить