Alex Pliutau
Alex Pliutau

Reputation: 21937

zend framework join 3 tables

I have 3 tables (order, product, order_item). In order i have the date. In order_item i have product_id and order_id. I need to select all products with orders, what created in the current month. It is my select:

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

But when i haven't orders result is empty. And i should always have all products. Sorry for my english. Thanks.

Upvotes: 3

Views: 1757

Answers (2)

Roger Halliburton
Roger Halliburton

Reputation: 2021

You need to either switch your joinLeft to a joinRight, or put your product table first in the query.

Upvotes: 0

Alex Pliutau
Alex Pliutau

Reputation: 21937

It was very hard. The right 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

Upvotes: 1

Related Questions