2011-01-19 77 views
3

我有3个表(order,product,order_item)。在order我有日期。在order_item我有product_idorder_id。我需要选择所有带有订单的产品,以及当月创建的产品。这是我的选择:zend框架连接3个表

$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())'); 

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

回答

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 
0

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