【问题标题】:zend framework join 3 tableszend 框架连接 3 个表
【发布时间】:2011-01-19 07:20:35
【问题描述】:

我有 3 个表(订单、产品、订单项)。在order 我有日期。在 order_item 中,我有 product_idorder_id。我需要选择当月创建的所有带有订单的产品。这是我的选择:

$select = $this->select()
    ->setIntegrityCheck(false)
    ->from(array('o' => 'order'))
    ->join(array('oi' => 'order_item'), 'o.id = oi.order_id', array('quantity'))
        ->joinLeft(array('p' => 'product'), 'p.id = oi.product_id', array('id', 'pbv', 'name'))
        ->where('MONTH(o.date) = MONTH(CURDATE())');

但是当我没有订单时,结果是空的。我应该始终拥有所有产品。对不起我的英语不好。谢谢。

【问题讨论】:

    标签: php mysql zend-framework select


    【解决方案1】:

    这太难了。正确的 SQL:

    USE lyf;
    SELECT
      *
    FROM
      `order` AS o
      LEFT JOIN order_item AS oi ON oi.order_id = o.id
      RIGHT JOIN product AS p ON oi.product_id = p.id
    WHERE
      IF(o.`date` IS NOT NULL, MONTH(o.`date`) = MONTH(NOW()), 1) = 1
    

    【讨论】:

      【解决方案2】:

      您需要将 joinLeft 切换为 joinRight,或者将产品表放在查询的首位。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-31
        • 1970-01-01
        相关资源
        最近更新 更多