我有一个包含产品的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。
我认为LEFT JOIN总是给出表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
答案 0 :(得分:1)
我无法确定这是否有效,所以很明显,如果它没有,请告诉我。
删除WHERE子句并将join语句更改为:
$this->db->JOIN('bestellingen', "bestellingen.drank_id = dranken.id AND bestellingen.date <= '$whereDate'","left");
希望这有帮助!
答案 1 :(得分:0)
在JOIN中使用内联视图(如果需要,请确保使用s别名 - 所以“s”替换bestellingen):
$this->db->JOIN(' ( select * from bestellingen where bestellingen.date <= ' . $whereDate . ' ) s ' [...]);