【发布时间】:2014-11-19 12:50:30
【问题描述】:
我有一个包含产品 (dranken) 的 sql 表和一个包含订单 (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
【问题讨论】:
-
你能把实际的查询也放在帖子里吗?您可以在通话后立即使用
die($this->db->last_query());。干杯 -
SELECT
dranken.id,dranken.naam,dranken.minimum_prijs,dranken.gewicht, SUM(bestellingen.alROM) AS to (dranken) 左连接bestellingenONbestellingen.drank_id=dranken.idWHEREbestellingen.datedate IS NULL GROUP BYdranken.id
标签: php mysql codeigniter