Несколько условий с левым соединением в Zend Framework - PullRequest
3 голосов
/ 19 декабря 2011

Я столкнулся с проблемой при работе с Zend Framework. В основном я пытаюсь добавить оператор AND в подзапрос, используя левое соединение. Пожалуйста, посмотрите следующий qyery, который производит мой код,

ВЫБРАТЬ d. *, Количество (статус) ОТ deal КАК d ВЛЕВО СОЕДИНИТЬ payments ВКЛ payments .deal_id = d .deal_id GROUP BY d. deal_id ORDER BY created_date desc

Код:

    $select = $this->_db->select()
      ->from(array('d'=>'deal'))                       
      ->joinLeftUsing('payments', 'deal_id', array('count(status)'))
      ->order("created_date $sortOrder")
       ->group("d.deal_id");

Однако я хочу добавить еще одно условие в свой подзапрос, т. Е. Status = 1, см. Следующий вывод, который я хочу получить.

ВЫБРАТЬ d. *, Считать (статус) ОТ deal КАК d ВЛЕВО СОЕДИНЯЕТСЯ payments ВКЛ payments .deal_id = d .deal_id И статус = 1 ГРУППА BY d. deal_id ЗАКАЗАТЬ ПО created_date desc

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

Спасибо, Gagz

1 Ответ

4 голосов
/ 19 декабря 2011

Я бы рекомендовал использовать joinLeft вместо joinLeftUsing

$select = $this->_db->select()
      ->from(array('d'=>'deal'))                       
      ->joinLeft('payments', 'payments.deal_id = d.deal_id and status = 1', 
                 array('count(status)'))
      ->order("created_date $sortOrder")
      ->group("d.deal_id");

дает мне

SELECT `d`.*, count(status) FROM `deal` AS `d`
LEFT JOIN `payments` ON payments.deal_id = d.deal_id and status = 1 
GROUP BY `d`.`deal_id` ORDER BY `created_date ` ASC
...