Как правильно подключить такой SQL запрос в контроллер Shop_Controller_Show ?

#
Как правильно подключить такой SQL запрос в контроллер Shop_Controller_Show ?
Доброго всем дня! Помогите данный SQL правильно положить в контроллер Shop_Controller_Show:
Смотрю http://www.hostcms.ru/documentation/modules/core/querybuilder/ не очень понятно как организовать два селекта
SELECT shop_items.*, COUNT(property_value_ints.property_id) AS detail_cnt
FROM shop_items, property_value_ints
WHERE shop_items.id = property_value_ints.entity_id
AND property_value_ints.property_id = 12
AND property_value_ints.value > 0
GROUP BY shop_items.id
HAVING detail_cnt = 1;


Для дальнейшей обработки в XSL
Спасибо.
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
Модератор
#
Re: Как правильно подключить такой SQL запрос в контроллер Shop_Controller_Show ?
что за два селекта?
ограничения по доп. св-ву описаны в контроллерах: http://www.hostcms.ru/documentation/modules/core/controllers/
#
Re: Как правильно подключить такой SQL запрос в контроллер Shop_Controller_Show ?
HostCMS писал(а):
что за два селекта?

Надо вытащит записи которые являются один к одному в этой связке. То есть если  у товара записи на дочерней таблице есть только одна запись. Так как там могут быть несколько записей.
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Как правильно подключить такой SQL запрос в контроллер Shop_Controller_Show ?
Если у товара указана только одно значение в доп.свойстве. И например определенный со значением
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
Модератор
#
Re: Как правильно подключить такой SQL запрос в контроллер Shop_Controller_Show ?
Seri,
готовый пример фильтрации по ссылке выше!
#
Re: Как правильно подключить такой SQL запрос в контроллер Shop_Controller_Show ?
HostCMS писал(а):
готовый пример фильтрации по ссылке выше!

Если вы об этом:
$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`')))
       )
     )
     ->groupBy('shop_items.id')
     ->where('property_value_ints.property_id', '=', 63)
     ->clearOrderBy()
     ->orderBy('property_value_ints.value', 'DESC');

То да, но я имею в виду что у товара могут быть в property_value_ints.value = (80,90,95,....)
В моем случает необходимо если у товара указана  только property_value_ints.value = 80 Если у товара есть property_value_ints.value = (80,90,95) то пропускаем потому что тут есть несколько значений.
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Как правильно подключить такой SQL запрос в контроллер Shop_Controller_Show ?
Вот так я отлавливаю такие свойства товаров где только property_value_ints.value = 80 и имеет только одно такое значение:
SELECT property_value_ints.value, shop_items.*, COUNT(property_value_ints.property_id) AS detail_cnt
FROM shop_items, property_value_ints
WHERE shop_items.id = property_value_ints.entity_id
AND property_value_ints.property_id = 12
AND property_value_ints.value > 0

GROUP BY shop_items.id
HAVING property_value_ints.value = 80 and detail_cnt =1
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
Модератор
#
Re: Как правильно подключить такой SQL запрос в контроллер Shop_Controller_Show ?
Seri,
1. непонятно, зачем здесь order by detail_cnt
2. Используйте
->having(Core_Querybuilder::expression('COUNT(`property_value_ints`.`property_id`)', '=', 1)
#
Re: Как правильно подключить такой SQL запрос в контроллер Shop_Controller_Show ?
HostCMS писал(а):
1. непонятно, зачем здесь order by detail_cnt

Это я для себя что бы сортировать
HostCMS писал(а):
2. Используйте
->having(Core_Querybuilder::expression('COUNT(`property_value_ints`.`property_id`)', '=', 1)

Пробовал:
$Shop_Controller_Show = new Shop_Controller_Show(
    Core_Entity::factory('Shop', 1)
);

$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`')))
        )
    )
    ->groupBy('shop_items.id')
    ->where('shop_items.deleted', '=', 0)
    ->where('shop_items.active', '=', 1)
    ->where('property_value_ints.property_id', '=', 12)
    ->where('property_value_ints.value', '=', 80)

    ->having(Core_Querybuilder::expression('COUNT(`property_value_ints`.`property_id`)'), '=', 1)
    ->clearOrderBy()
    ->orderBy('property_value_ints.value', 'DESC');

Выводит больше записей. Как я уже не однократно так пробовал что не удовлетворяет условие.
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
Модератор
#
Re: Как правильно подключить такой SQL запрос в контроллер Shop_Controller_Show ?
Seri,
включите запросы через константу и посмотрите на запрос. выясните что именно не верно.

Мне непонятно, зачем вы делаете
    ->where('shop_items.deleted', '=', 0)
    ->where('shop_items.active', '=', 1)
если сам контроллер все это умеет.

Далее, если у вас всегда фильтр по значению, то два leftJoin можете поменять на join
Авторизация