Я хотел бы создать сводную таблицу расходов из SQL select в PHP, в которой даты будут строками, категории будут столбцами данных, а сумма всех расходов на дату определенного дня, а категория будет данными таблицы.
Необработанные данные хранятся в таблице SQL:
ID - DATE - CATEGORY - CAT. NAME - PRICE
01 - 1/01 - 1 - CAR - 5
02 - 1/01 - 2 - FOOD - 10
03 - 1/02 - 2 - FOOD - 10
04 - 1/02 - 2 - FOOD - 10
05 - 1/02 - 4 - HOUSE - 50
06 - 1/02 - 1 - CAR - 5
07 - 1/03 - 1 - CAR - 5
08 - 1/03 - 2 - FOOD - 10
09 - 1/03 - 2 - FOOD - 10
10 - 1/03 - 3 - DOG - 20
Это таблица расходов. Не каждый день заполнил каждую категорию.
Я использую другую таблицу для хранения имен таблиц для идентификаторов категорий.
Я получаю запрос SQL:
SELECT E.expense_date, C.id_category, C.category_name, SUM(E.price) AS price
FROM expenses E, expenses_category C
WHERE E.category = C.id_category
GROUP BY E.expense_date, C.category_name
ORDER BY E.expense_date ASC, C.category_name, E.price ASC
Результат запроса SQL выглядит примерно так:
DATE - CAT. NAME - SUM
1/01 - CAR - 5
1/01 - FOOD - 10
1/02 - CAR - 5
1/02 - FOOD - 20
1/02 - HOUSE - 50
1/01 - CAR - 5
1/01 - FOOD - 20
1/01 - DOG - 20
Но я хотел бы перенести SQL select в сводную таблицу, где строки будут датами, столбцы данных будут категориями, а данные таблицы будут суммой затрат. Как это:
CAR / FOOD / DOG / HOUSE / DAY
1/01 5 10 X X 25
1/02 5 20 X 50 65
1/03 5 20 20 X 45
SUM 15 50 20 50 135
Я обдумываю эту проблему около месяца и ищу ответы за последние 6 часов. К сожалению, моих навыков недостаточно для решения кейса и создания правильного кода PHP: {
Я пробовал несколько подходов, но не было успешным. Я знаю только процедурное кодирование, ООП — это мое знание.
Вся информация / учебные пособия, которые я нашел, фокусируются только на конечных категориях, в то время как я пытаюсь создать код, который будет создавать количество столбцов таблицы на основе количества категорий, которые были извлечены (понимать бесконечно).
Кто-нибудь может помочь мне разработать PHP-код для извлечения сводной таблицы?
Рассматривается результат вашей базы данных $result
это оспоримый и выбранный вами режим извлечения:
foreach($result as $row)
{
$table[$row["expense_date"]][$row["category_name"]] = $row["price"];
}
Перед новым дата расхода Вы также можете инициализировать все поля категорий с помощью "X"
чтобы они уже были в $table
массив или вы делаете это на лету, когда вы выводите таблицу на неустановленные поля в матрице.
То же, что и в столбце итогов, вам нужно создать сумму (или вы уже делаете это в своем запросе SQL, это должно быть возможно с помощью UNION
).
Других решений пока нет …