我有2张桌子。一个带有客户列表,另一个带有数据列表。我试图在我的视图中创建一个表,该表列出客户端名称以及数据表中列(job_total)的总和。我能够编写一个在大多数情况下都能正常工作的查询。问题是,如果我还没有在数据表中创建记录,我仍需要在视图中显示客户端名称,并且该表上的余额为零。需要有关如何处理此问题的指导。我当时想我需要查询我的客户列表并遍历该查询,只是不确定该怎么做。
我希望我的视图如下所示:
+-------------+---------+ | Client Name | Balance | +-------------+---------+ | xxx | $75.00 | | xxx | $100.00 | | xxx | $0.00 | +-------------+---------+
这是数据库中两个表的粗略布局:
cj_clients +----+-------------+ | id | client name | +----+-------------+ | 1 | client1 | | 2 | client2 | | x | xxx | +----+-------------+
cj_data +----+-----------+-----------+ | id | client_id | job_total | +----+-----------+-----------+ | 1 | 1 | 5.00 | | 2 | 1 | 10.00 | | 3 | 1 | 15.00 | +----+-----------+-----------+
下面的代码返回所需的结果,除非尚未对cj_data表进行任何输入。不确定如何仍以余额$ 0的形式让客户进入表格视图。
$this->db->select('client_name,client_id, sum(job_total) AS balance')
->from('cj_data')
->join('cj_clients','cj_data.client_id = cj_clients.id')
->group_by('client_name');
return $this->db->get()->result();
答案 0 :(得分:1)
您需要左联接
$this->db->select('client_name,client_id, IFNULL(sum(job_total),0) AS balance')
->from('cj_data')
->join('cj_clients','cj_data.client_id = cj_clients.id',"left") // here
->group_by('client_name');
return $this->db->get()->result();
如果未找到记录,我写了IFNULL条件,否则它将显示cj_clients中所有客户端的所有数据
注意:CodeIgniter的默认行为是它将添加内部联接 如果未指定连接