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

#
Re: Как правильно подключить такой SQL запрос в контроллер Shop_Controller_Show ?
HostCMS писал(а):
Далее, если у вас всегда фильтр по значению, то два leftJoin можете поменять на join

Наблюдаю такой запрос:
SELECT
`shop_items`.*
FROM shop_items
INNER JOIN `shop_item_properties` ON `shop_items`.`shop_id` = `shop_item_properties`.`shop_id`
INNER 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` < '2017-02-07 17:05:45' OR `shop_items`.`start_datetime` = '0000-00-00 00:00:00'  )
AND (  `shop_items`.`end_datetime` > '2017-02-07 17:05:45' OR `shop_items`.`end_datetime` = '0000-00-00 00:00:00'  ) AND `shop_items`.`siteuser_group_id` IN (0, -1)
AND `property_value_ints`.`property_id` = 12 AND `property_value_ints`.`value` = 80
GROUP BY `shop_items`.`id`
HAVING  COUNT(`property_value_ints`.`property_id`) = 1
ORDER BY `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,
у вас в запросе
AND `property_value_ints`.`value` = 80
был в HAVING, иначе вся ваша логика с COUNT() теряет смысл!
#
Re: Как правильно подключить такой SQL запрос в контроллер Shop_Controller_Show ?
HostCMS писал(а):
у вас в запросе
AND `property_value_ints`.`value` = 80
был в HAVING, иначе вся ваша логика с COUNT() теряет смысл!

Я уже не понимаю в конструкции поправьте меня пожалуйста тогда?
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('property_value_ints.property_id', '=', 12)
    ->where('property_value_ints.value', '=', 80)
    ->having(Core_Querybuilder::expression('COUNT(`property_value_ints`.`property_id`)'), '=', 1)


ваш код ранее
HAVING property_value_ints.value = 80 and detail_cnt =1

не находите, что цифра 80 должна стоять в having, а не where, это все очевидно из вашего же кода, я ничего дополнительно здесь не придумал.

соответственно
->where('property_value_ints.value', '=', 80)
меняете на
->having('property_value_ints.value', '=', 80)
#
Re: Как правильно подключить такой SQL запрос в контроллер Shop_Controller_Show ?
HostCMS писал(а):
->having('property_value_ints.value', '=', 80)

Да вы правы, прошу прошение за ошибку. Думаю близок уже к разгадке:
Exception: Query error 42S22: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'property_value_ints.value' in 'having clause'. Query: SELECT SQL_CALC_FOUND_ROWS `shop_items`.* FROM `shop_items` INNER JOIN `shop_item_properties` ON `shop_items`.`shop_id` = `shop_item_properties`.`shop_id` INNER 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` < '2017-02-07 17:32:16' OR `shop_items`.`start_datetime` = '0000-00-00 00:00:00' ) AND ( `shop_items`.`end_datetime` > '2017-02-07 17:32:16' OR `shop_items`.`end_datetime` = '0000-00-00 00:00:00' ) AND `shop_items`.`siteuser_group_id` IN (0, -1) AND `property_value_ints`.`property_id` = 12 AND `shop_items`.`active` = 1 AND ( `shop_items`.`shop_group_id` = 0 ) AND `shop_items`.`deleted` = 0 GROUP BY `shop_items`.`id` HAVING COUNT(`property_value_ints`.`property_id`) = 1 AND `property_value_ints`.`value` = 80 ORDER BY `shop_items`.`sorting` ASC, `shop_items`.`name` ASC LIMIT 10 OFFSET 0

Здесь логично не находит 'property_value_ints.value' как быть куда добавить не подскажете?
$Shop_Controller_Show
    ->shopItems()
    ->queryBuilder()
    ->join('shop_item_properties', 'shop_items.shop_id', '=', 'shop_item_properties.shop_id')
    ->join('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', '=', 12)
    ->having(Core_Querybuilder::expression('COUNT(`property_value_ints`.`property_id`)'), '=', 1)
    ->having('property_value_ints.value', '=', 80);
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 ?
Спасибо за поддержку и терпение. Разобрался все работает как надо:
$Shop_Controller_Show
    ->shopItems()
    ->queryBuilder()
    ->select(Core_QueryBuilder::expression('`property_value_ints`.`value`'))
    ->join('shop_item_properties', 'shop_items.shop_id', '=', 'shop_item_properties.shop_id')
    ->join('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', '=', 12)
    ->having(Core_Querybuilder::expression('COUNT(`property_value_ints`.`property_id`)'), '=', 1)
    ->having('property_value_ints.value', '=', 80)
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 ?
пожалуйста!
Авторизация