Присоединиться к 2 таблице с групповым запросом в codeigniter

INVOICES TABLE
id  |   date        | Customer
1   |   2018-01-01  |    a
2   |   2018-01-01  |    b
3   |   2018-01-02  |    c
4   |   2018-01-02  |    d
5   |   2018-01-02  |    e


INVOICES_ITEMS TABLE
id  |   invoice_id  |   name       | total
1   |       1       | Billing      |  1500
2   |       2       | Billing      |  400
3   |       2       | Reconnection |  100
4   |       3       | Installation |  1000
5   |       4       | Billing      |  900
6   |       4       | Penalty      |  500
7   |       5       | Reconnection |  100

У меня есть таблица invoice_items в моей базе данных для хранения всех элементов счета. У меня есть date column в моем Invoice Table и name column в моем invoice_item table. Я хочу сгруппировать все данные с одинаковым именем и датой и получить их общее количество. Мне трудно достичь того, чего я хочу. Любая помощь будет оценена по достоинству. Спасибо

Ожидаемый результат:

    Date   | Billing | Reconnection | Installation | Penalty
2018-01-01 |  1900   |   100        |      0       |    0
2018-01-02 |  900    |   100        |      1000    |    500

Текущий код:

$q = $this->db
        ->select ( "invoices.date, 
             SUM(invoices_items.total) as Billing,
             SUM(invoices_items.total) as Reconnection,
             SUM(invoices_items.total) as Installation,
             SUM(invoices_items.total) as Penalty,
        ->from("invoices")
        ->join("invoices_items", "invoices.id=invoices_items.invoice_id")
        ->group_by(array("date","name"))
        ->get();

Текущий вывод кода:

    Date   | Billing | Reconnection | Installation | Penalty
2018-01-01 |  1900   |   1900       |      1900    |    1900
2018-01-01 |  100    |   100        |      100     |    100
2018-01-02 |  900    |   900        |      900     |    900
2018-01-02 |  100    |   100        |      100     |    100
2018-01-02 |  1000   |   1000       |      1000    |    1000
2018-01-02 |  500    |   500        |      500     |    500

есть ошибка?

AbdulAhmad Matin 10.08.2018 05:03

Никто. но результат неверен, я не могу добиться ожидаемого результата.

Bryan 10.08.2018 05:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
236
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я думаю, вам следует использовать date () в группе by. Вы можете попробовать это. Это может сработать

 $this->db
        ->select ("i.date, 
             SUM(it.total) as Billing,
             SUM(it.total) as Reconnection,
             SUM(it.total) as Installation,
             SUM(it.total) as Penalty")
        ->from("invoices i")
        ->join("invoices_items it", "i.id=it.invoice_id")
        ->group_by(['date(i.date)', 'it.name'])
        ->get();

спасибо за ответ, но все равно не получается получить результат как в expected output

Bryan 10.08.2018 07:19
Ответ принят как подходящий

Попробуйте Sum с условием if ...

$q = $this->db
        ->select ( "invoices.date, 
            SUM(IF(invoices_items.name='Billing',invoices_items.total, 0)) as Billing,
            SUM(IF(invoices_items.name='Reconnection',invoices_items.total, 0)) as Reconnection,
            SUM(IF(invoices_items.name='Installation',invoices_items.total, 0)) as Installation,
            SUM(IF(invoices_items.name='Penalty',invoices_items.total, 0)) as Penalty")
        ->from("invoices")
        ->join("invoices_items", "invoices.id=invoices_items.invoice_id")
        ->group_by(array("invoices.date"))
        ->get();

Другие вопросы по теме