【问题标题】:Multiple Conditions with Left Join in Zend FrameworkZend 框架中左连接的多个条件
【发布时间】:2011-12-19 13:42:59
【问题描述】:

我在使用 Zend Framework 时遇到问题。基本上,我试图在使用左连接的子查询中添加一个 AND 运算符。请查看我的代码生成的以下查询:

SELECT `d`.*, count(status) FROM `deal` AS `d` LEFT JOIN `payments` ON `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,请查看我愿意得到的以下输出。

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` desc  

如果有人知道我如何实现同样的目标,请告诉我。

谢谢, 呸呸呸

【问题讨论】:

    标签: sql join zend-framework zend-db


    【解决方案1】:

    我建议使用 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
    

    【讨论】:

      【解决方案2】:

      我们可以在 Zend 3 中使用表达式:

      $join = new \Zend\Db\Sql\Expression('contractor_jobs.contractor_id = contractor_info.contractor_id AND 
                                  contractor_jobs.job_trade_id = '.$variableName.' ');
      
          $select->join(
              'contractor_jobs',
              $join,
              array('job_trade_id'),
              $select::JOIN_LEFT
          );
      

      它对我有用。您也可以根据您的情况进行检查。感谢您提出这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-13
        • 1970-01-01
        • 1970-01-01
        • 2018-12-06
        • 2011-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多