首页 > 解决方案 > 使用连接 codeigniter 的求和查询

问题描述

我有 2 张桌子。一个带有客户列表,另一个带有数据列表。我正在尝试在我的视图中创建一个表,其中列出了客户名称以及数据表中列(job_total)的总和。我能够编写一个在大多数情况下都能正常工作的查询。问题是,如果我还没有在数据表中创建记录,我仍然需要在我的视图中的表上显示余额为零的客户名称。需要一些关于如何处理这个问题的指导。我在想我需要查询我的客户列表并遍历该查询,只是不知道该怎么做。

我希望我的视图如下所示:

    +-------------+----------+
    | 客户名称 | 余额 |
    +-------------+----------+
    | xxx | $75.00 |
    | xxx | $100.00 |
    | xxx | $0.00 |
    +-------------+----------+
    

这是我数据库中两个表的粗略布局:

    cj_clients
    +----+--------------+
    | 编号 | 客户名称 |
    +----+--------------+
    | 1 | 客户1 |
    | 2 | 客户2 |
    | x | xxx |
    +----+--------------+
    
    cj_data
    +----+------------+------------+
    | 编号 | 客户 ID | 工作总数 |
    +----+------------+------------+
    | 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();

标签: phpmysqlcodeigniter

解决方案


你需要给左加入

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


推荐阅读