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();
任何人都可以有一些想法来做到这一点。在此先感谢
你是否得到任何结果,或者只是不是你期望的结果? – Gavin 2013-03-12 10:28:19
@Gavin是的,我得到了一些结果,但不是预期的结果。 – Balu 2013-03-12 10:35:32
我在你的两个查询中注意到的一件事是,你在第二个查询中使用'clients.is_deleted = 0',因为你不是第一个查询。除此之外,你的查询看起来对我很好吗? – Gavin 2013-03-12 11:01:54