用join codeigniter进行求和查询

时间:2019-06-04 11:55:01

标签: php mysql codeigniter

我有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();

1 个答案:

答案 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的默认行为是它将添加内部联接   如果未指定连接