[英]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。
我以為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
我不確定這是否會奏效,因此顯然不能,請告訴我。
刪除WHERE子句,並將join語句更改為:
$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 ' [...]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.