2011-01-19 11 views
3

私は3つのテーブルを持っています(order、product、order_item)。 orderに私は日付があります。 order_itemにはproduct_idorder_idがあります。今月に作成された注文を含むすべての商品を選択する必要があります。それは私の選択です:zend framework join 3 tables

$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

あなたはjoinRightにごjoinLeftを切り替える、またはクエリの最初の製品テーブルを置くのいずれかが必要です。