2013-03-12 58 views
3

我在codeigniter.Here做一個項目,我想加入三個表加入笨三個表具有一對多的關係

客戶(ID,姓名,電子郵件,adminId,CAMPAIGNID,dateAdded,IS_DELETED)

campaign(id,name,adminId)and

order(id,name,cost,dateAdded,clientId)。

從這些表格中,我想選擇(在兩個日期之間)添加的客戶端數量,廣告系列名稱和總訂單成本。當我加入兩個表格(客戶端和廣告系列)時,它會返回正確的結果。

我使用的查詢是

$this->db->select('clients.id AS my_client, 
    clients.name AS client_name, 
    campaign.name AS campaign_name, 
    DATE(clients.dateAdded) as client_date, 
    COUNT(clients.id) AS num_rows'); 

$this->db->from('clients'); 
$this->db->where('clients.adminId', $adminId); 
$this->db->where('DATE(clients.dateAdded) >=', $from_date); 
$this->db->where('DATE(clients.dateAdded) <=', $to_date); 
$this->db->join('campaign', 'campaign.id = clients.campaignId', 'left'); 
$this->db->group_by('campaign_name'); 
$query = $this->db->get(); 
return $query->result(); 

但是,當我加入三個表(客戶,廣告活動,順序)它沒有返回客戶和訂單之間的正確result.The關係之一many.Ie一個客戶端可以有不止一個order.So它不會給正確的值兩個dates.The之間增加客戶的總數聯接查詢我用來連接三個表是

$this->db->select('clients.id AS my_client, 
    clients.name AS client_name, 
    campaign.name AS campaign_name, 
    DATE(clients.dateAdded) AS client_date, 
    SUM(order.cost) AS order_cost, 
    COUNT(clients.id) AS num_rows'); 

$this->db->from('clients'); 
$this->db->where('clients.adminId', $adminId); 
$this->db->where('clients.is_deleted', 0); 
$this->db->where('DATE(clients.dateAdded) >=', $from_date); 
$this->db->where('DATE(clients.dateAdded) <=', $to_date); 
$this->db->join('campaign', 'campaign.id = clients.campaignId', 'left'); 
$this->db->join('order', 'order.clientId = clients.id', 'left'); 
$this->db->group_by('campaign_name'); 
$query = $this->db->get(); 
return $query->result(); 

任何人都可以有一些想法來做到這一點。在此先感謝

+0

你是否得到任何結果,或者只是不是你期望的結果? – Gavin 2013-03-12 10:28:19

+0

@Gavin是的,我得到了一些結果,但不是預期的結果。 – Balu 2013-03-12 10:35:32

+0

我在你的兩個查詢中注意到的一件事是,你在第二個查詢中使用'clients.is_deleted = 0',因爲你不是第一個查詢。除此之外,你的查詢看起來對我很好嗎? – Gavin 2013-03-12 11:01:54

回答

2

我得到了通過增加對客戶端的數量計數不同client.id(COUNT(DISTINCT(clients.id)))預期的結果,

$this->db->select('clients.id AS my_client, 
    clients.name AS client_name, 
    campaign.name AS campaign_name, 
    DATE(clients.dateAdded) AS client_date, 
    SUM(order.cost) AS order_cost, 
    COUNT(DISTINCT(clients.id)) AS num_rows'); //changed the code here from COUNT(clients.id) AS num_rows 

$this->db->from('clients'); 
$this->db->where('clients.adminId', $adminId); 
$this->db->where('clients.is_deleted', 0); 
$this->db->where('DATE(clients.dateAdded) >=', $from_date); 
$this->db->where('DATE(clients.dateAdded) <=', $to_date); 
$this->db->join('campaign', 'campaign.id = clients.campaignId', 'left'); 
$this->db->join('order', 'order.clientId = clients.id', 'left'); 
$this->db->group_by('campaign_name'); 
$query = $this->db->get(); 
return $query->result(); 

我不認爲這是正確的way.Is有任何更好的方式來做到這一點。感謝您的支持。

相關問題