Zend Framework объединяет 3 таблицы - PullRequest
3 голосов
/ 19 января 2011

У меня есть 3 таблицы (заказ, продукт, order_item).В order у меня есть дата.В order_item у меня есть product_id и order_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())');

Но когда у меня нет заказов, результат будет пустым.И у меня всегда должны быть все продукты.Извините за мой английский.Спасибо.

Ответы [ 2 ]

1 голос
/ 19 января 2011

Это было очень тяжело.Правильный 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 голосов
/ 19 января 2011

Вам нужно либо переключить свой joinLeft на joinRight, либо поставить в таблице таблицу продуктов первой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...