加入代码点火器


Joins in codeigniter

我有一个包含产品的sql表(dranken)和一个包含订单的表(bestellingen)。

现在我想选择所有产品并获取该产品所有订单的总和。这适用于以下代码:

$this->db->SELECT('dranken.id,dranken.naam,dranken.minimum_prijs,dranken.gewicht, SUM(bestellingen.aantal) AS totaalVerkocht');
$this->db->FROM('dranken');
$this->db->group_by('dranken.id');
$this->db->JOIN('bestellingen', 'bestellingen.drank_id = dranken.id',"left");

但我只想在特定日期之前获得订单的总和。

$this->db->WHERE('bestellingen.date <=',$whereDate);

这几乎有效。它没有给我没有订单的产品。所以我添加了这个 WHERE 子句。

$this->db->OR_WHERE('bestellingen.date',NULL);

但现在我有一个问题。当产品的订单在 where 子句之后具有日期时,它将从结果中消失。或多或少合乎逻辑,因为它与 WHERE 语句不匹配。

但我不希望它们消失。如果没有与此匹配的顺序,我想要 NULL。

我以为左联接总是给出表 1 的所有记录?

我该如何解决这个问题?

这是生成的查询:

SELECT 
    dranken.id, dranken.naam, dranken.minimum_prijs, dranken.gewicht, SUM(bestellingen.aantal) AS totaalVerkocht 
FROM (dranken) 
LEFT JOIN bestellingen ON bestellingen.drank_id = dranken.id 
WHERE 
    bestellingen.date <= '2014-11-19 14:00:00' 
OR  bestellingen.date IS NULL 
GROUP BY dranken.id

我不能确定这是否有效,所以显然如果它不起作用,请告诉我。

删除 WHERE 子句并将连接语句更改为:

$this->db->JOIN('bestellingen', "bestellingen.drank_id = dranken.id AND bestellingen.date <= '$whereDate'","left");

希望这有帮助!

像这样在 JOIN 中使用内联视图(确保在需要时使用 s 别名 - 所以"s"替换 bestellingen):

$this->db->JOIN(' ( select * from bestellingen where bestellingen.date <= ' . $whereDate . ' ) s ' [...]);