`informationsystem_item_properties`.`property_id` = 77
AND `property_value_ints`.`value` = 240
GROUP BY `informationsystem_items`.`id`
HAVING COUNT(DISTINCT `informationsystem_item_properties`.`property_id`) = 1
И так тоже:
...
WHERE
`informationsystem_item_properties`.`property_id` = 65
AND `property_value_strings`.`value` = '117 480'
GROUP BY `informationsystem_items`.`id`
HAVING COUNT(DISTINCT `informationsystem_item_properties`.`property_id`) = 1
А вместе - никак:
SELECT
SQL_CALC_FOUND_ROWS
`informationsystem_items`.*
FROM `informationsystem_items`
LEFT OUTER JOIN `informationsystem_item_properties` ON `informationsystem_items`.`informationsystem_id` = `informationsystem_item_properties`.`informationsystem_id`
LEFT OUTER JOIN `property_value_ints` ON `informationsystem_items`.`id` = `property_value_ints`.`entity_id` AND `informationsystem_item_properties`.`property_id` = `property_value_ints`.`property_id`
LEFT OUTER JOIN `property_value_strings` ON `informationsystem_items`.`id` = `property_value_strings`.`entity_id` AND `informationsystem_item_properties`.`property_id` = `property_value_strings`.`property_id`
WHERE
(`informationsystem_item_properties`.`property_id` = 77
AND `property_value_ints`.`value` = 240)
AND (`informationsystem_item_properties`.`property_id` = 65
AND `property_value_strings`.`value` = '117 480')
GROUP BY `informationsystem_items`.`id`
HAVING COUNT(DISTINCT `informationsystem_item_properties`.`property_id`) = 2
Re: Помогите объединить два фильтра по допсвойствам
catfelix150,
Вы почти достигли того, что нужно. Однако у Вас логическая ошибка:
(`informationsystem_item_properties`.`property_id` = 77
AND `property_value_ints`.`value` = 240)
AND (`informationsystem_item_properties`.`property_id` = 65
AND `property_value_strings`.`value` = '117 480')
ну никак одно поле одновременно не может быть равно 77 и 65, Вы согласны? Чтобы решить эту проблему, блоки условий по свойствам объединяются через OR! Но ведь тогда выберутся элементы с любыми комбинациями: свойство 1, свойство 2 или оба сразу. Для решения этого вопроса в конце и идет HAVING COUNT(...) = 2, где 2 - количество различных свойств.
$Informationsystem_Controller_Show
->informationsystemItems()
->queryBuilder()
->leftJoin..
...
// Первое свойство ->open()
->where('informationsystem_item_properties.property_id', '=', 19)
->where('property_value_ints.value', '=', '123') ->close()
....
// Блоки свойств через ИЛИ ->setOr()