Запрос суммирования с присоединением codeigniter - PullRequest
0 голосов
/ 04 июня 2019

У меня есть 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 Ответ

1 голос
/ 04 июня 2019

Вам нужно дать левое соединение

$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 по умолчанию - добавление внутреннего соединения. если соединение не указано

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...