Как записать сумму вложенных подзапросов из SQL выражения в выражение для Zend Framework?

Добрый день!

В общем есть такой запрос, который складывает два ответа из вложенных запросов. Первый подзапрос собирает джоином количество лайков одного типа из двух таблиц, а второй лайки другого типа из еще одной таблицы.

Я записал простой запрос, который это выполняет, но теперь его нужно привести в выражение для ZF и с этим возникли проблемы.

Запрос:
SELECT
(
SELECT COUNT(*)
FROM `engine4_activity_actions`
INNER JOIN `engine4_activity_likes` ON `engine4_activity_likes`.resource_id = `engine4_activity_actions`.action_id
WHERE `engine4_activity_likes`.poster_id != `engine4_activity_actions`.object_id
AND `engine4_activity_actions`.object_id = 3
) + (
SELECT COUNT(*)
FROM `engine4_core_likes`
WHERE `engine4_core_likes`.user_id = 3
) 
AS likes_total;


Подскажите, пожалуйста, как мне его записать.
P.S. Конструктивная критика приветствуется :)
  • Вопрос задан
  • 2745 просмотров
Решения вопроса 1
@Borgia Автор вопроса
В общем вот такой, не самый красивый, но рабочий код:

$tableActivityActions = Engine_Api::_()->getDbTable('actions', 'activity');
    $tableActivityActionsName = $tableActivityActions->info('name');
    
    $tableActivityLikes = Engine_Api::_()->getDbTable('likes', 'activity');
    $tableActivityLikesName = $tableActivityLikes->info('name');
    
    $tableCoreLikes = Engine_Api::_()->getDbTable('likes', 'core');
    $tableCoreLikesName = $tableCoreLikes->info('name');
        
    // get sub-select from first table
    $selectCoreLikes = $tableCoreLikes->select()
        ->from($tableCoreLikesName, array('COUNT(*)'))
        ->where("$tableCoreLikesName.user_id = ?", $user_id)
        ;
    
    // get sub-select from second table
    $selectActivityLikes = $tableActivityActions->select()
        ->from($tableActivityActionsName, array('COUNT(*)'))
        ->join($tableActivityLikesName, "$tableActivityLikesName.resource_id = $tableActivityActionsName.action_id", null)
        ->where("$tableActivityLikesName.poster_id != $tableActivityActionsName.object_id")
        ->where("$tableActivityActionsName.object_id = ?", $user_id)
        ;
    
    $db = $tableCoreLikes->getAdapter();
    $selectTotalLikes = $db->query('SELECT (' . $selectCoreLikes->__toString() . ') + ('
                                   . $selectActivityLikes->__toString() . ')');
    $result = $selectTotalLikes->fetchAll();
    
    $totalLikes = array_shift($result[0]);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@iznaur
php-обернуть-запрос
там не много похожий запрос,может поможет вам,к сожалению нету установленного zendа чтобы вами написанное обернуть
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы