Фильтр по диапазонам цен

#
Фильтр по диапазонам цен
Делаю фильтр по диапазонам цен в Интернет-магазине.
Пример цен: 0-1000, 1000-2000, 2000-3000.
Работает только когда выбираю один из диапазонов, когда несколько ничего не выводит.

При выборе 0-1000 формируется следующий запрос:
SELECT SQL_CALC_FOUND_ROWS `shop_items`.*, IF (`shop_items`.`shop_currency_id` = '3', IF (shop_discounts.percent, price * (100 - shop_discounts.percent) * 0.123 / 100, shop_items.price * 0.123), IF (`shop_items`.`shop_currency_id` = '2', IF (shop_discounts.percent, price * (100 - shop_discounts.percent) * 0.091 / 100, shop_items.price * 0.091), IF (`shop_items`.`shop_currency_id` = '1', IF (shop_discounts.percent, price * (100 - shop_discounts.percent) * 3.731 / 100, shop_items.price * 3.731), IF (`shop_items`.`shop_currency_id` = '4', IF (shop_discounts.percent, price * (100 - shop_discounts.percent) * 1 / 100, shop_items.price * 1), price)))) AS `absolute_price` FROM `shop_items` LEFT OUTER JOIN `shop_item_discounts` ON `shop_items`.`id` = `shop_item_discounts`.`shop_item_id` LEFT OUTER JOIN `shop_discounts` ON `shop_item_discounts`.`shop_discount_id` = `shop_discounts`.`id` AND ( `shop_discounts`.`end_datetime` >= '2013-02-08 17:51:20' OR `shop_discounts`.`end_datetime` = '0000-00-00 00:00:00' AND `shop_discounts`.`start_datetime` <= '2013-02-08 17:51:20' ) WHERE `shop_items`.`shop_id` = '1' AND `shop_items`.`active` = 1 AND ( `shop_items`.`start_datetime` < '2013-02-08 17:51:20' OR `shop_items`.`start_datetime` = '0000-00-00 00:00:00' ) AND ( `shop_items`.`end_datetime` > '2013-02-08 17:51:20' 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_items`.`deleted` = 0 HAVING `absolute_price` >= '0' AND `absolute_price` < '1000' ORDER BY `absolute_price` DESC LIMIT 9 OFFSET 0


При выборе 0-1000 и 2000-3000 формируется то же за исключением HAVING
... HAVING `absolute_price` >= '0' AND `absolute_price` < '1000' AND `absolute_price` >= '2000' AND `absolute_price` < '3000' ...


В ТДС интернет-магазина передаю значения так:
$Shop_Controller_Show->shopItems()->queryBuilder()
                            ->having('absolute_price', '>=', '0')
                            ->having('absolute_price', '<', '1000');
$Shop_Controller_Show->shopItems()->queryBuilder()
                            ->having('absolute_price', '>=', '2000')
                            ->having('absolute_price', '<', '3000');


Подскажите как вывести товары с фильтром по нескольким диапазонам цен?
Модератор
#
Re: Фильтр по диапазонам цен
у Вас логическая ошибка, цена не может входить в два непересекающихся отрезка.
Правильный подход:
$Shop_Controller_Show->shopItems()
   ->queryBuilder()
   ->open()
   ->having('absolute_price', '>=', '0')
   ->having('absolute_price', '<', '1000')
   ->setOr()
   ->having('absolute_price', '>=', '2000')
   ->having('absolute_price', '<', '3000')
   ->close();
#
Re: Фильтр по диапазонам цен
Спасибо, разобрался.
Только вместо open() и close() поставил havingOpen() и havingClose() соответственно.
Модератор
#
Re: Фильтр по диапазонам цен
brokerUA,
Пожалуйста. Верно, в данном случае нужны именно они.
Авторизация