簡體   English   中英

加入codeigniter

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM