У меня 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())');
Но когда у меня нет заказов, результат пуст. И я всегда должен иметь все продукты. Извините за мой английский. Благодарю.
Это было очень сложно. Правильный 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
Вам нужно либо переключить joinLeft на joinRight, либо сначала поместить свою таблицу продуктов в запрос.