Добрый день!
Не получается выборка.
Товар имеет три свойства, эти три свойства имеют значения элемента ИС.
Есть фильтр по всем элементам ИС в виде чек боксов.
Верх - 1 свойство
Лиф-сердце
Американка
Спущенная линия плеча
С брителями
Без бритель
Закрытые плечи
Открытая спина
Силуэт - 2 свойство
А-силуэт
Рыбка
Прямое
Пышное
Короткое
Шлейф - 3 свойство
со шлейфом
без шлейфа
Пытаюсь сделать фильтр по отмеченным свойствам. Сейчас у меня получается следующие, если я отмечу чекбоксами значения только в одном свойстве, то всё хорошо (например со шлейфом, без шлейфа), товар ищется, если я отмечаю в нескольких свойствах значения (например со шлейфом,
без шлейфа и Прямое,
Пышное), то товар не показывается. Где я ошибся в построение запроса?
$count = 0;
$Shop_Controller_Show
->shopItems()
->queryBuilder()
->leftJoin('shop_item_properties', 'shop_items.shop_id', '=', 'shop_item_properties.shop_id')
->leftJoin('property_value_ints', 'shop_items.id', '=', 'property_value_ints.entity_id',
array(
array('AND' => array('shop_item_properties.property_id', '=', Core_QueryBuilder::expression('`property_value_ints`.`property_id`')))
)
);
foreach( $_GET['property'] as $id=>$aValue) {
$Shop_Controller_Show
->shopItems()
->queryBuilder()
->where('shop_item_properties.property_id', '=', $id)
->where('property_value_ints.value', 'IN', $aValue);
$count++;
}
$Shop_Controller_Show
->shopItems()
->queryBuilder()
->groupBy('shop_items.id')
// Количество свойств
->having(Core_Querybuilder::expression('COUNT(DISTINCT `shop_item_properties`.`property_id`)'), '=', $count);
$Shop_Controller_Show->group(FALSE);
$Shop_Controller_Show->groupsMode('none');
Сам запрос:
SELECT SQL_CALC_FOUND_ROWS `shop_items`.*
FROM `shop_items`
LEFT OUTER JOIN `shop_item_properties` ON `shop_items`.`shop_id` = `shop_item_properties`.`shop_id`
LEFT OUTER JOIN `property_value_ints` ON `shop_items`.`id` = `property_value_ints`.`entity_id` AND `shop_item_properties`.`property_id` = `property_value_ints`.`property_id`
WHERE `shop_items`.`shop_id` = '1' AND ( `shop_items`.`start_datetime` < '2014-02-13 09:17:52' OR `shop_items`.`start_datetime` = '0000-00-00 00:00:00' ) AND ( `shop_items`.`end_datetime` > '2014-02-13 09:17:52' OR `shop_items`.`end_datetime` = '0000-00-00 00:00:00' ) AND `shop_items`.`siteuser_group_id` IN (0, -1) AND `shop_items`.`modification_id` = 0
AND `shop_item_properties`.`property_id` = 63 AND `property_value_ints`.`value` IN ('151', '152', '153', '154')
AND `shop_item_properties`.`property_id` = 64 AND `property_value_ints`.`value` IN ('156', '157')
AND `shop_items`.`active` = 1 AND `shop_items`.`deleted` = 0 GROUP BY `shop_items`.`id`
HAVING COUNT(DISTINCT `shop_item_properties`.`property_id`) = 2 ORDER BY `shop_items`.`sorting` ASC, `shop_items`.`name` ASC LIMIT 16 OFFSET 0