php - php sql 中包含日期、变量类别和总和值的数据透视表

标签 php mysql pivot-table categories

我想通过 PHP 中的 SQL select 创建费用数据透视表,其中日期为行,类别为数据列,特定日期和类别中所有费用的总和为表数据。

原始数据存储在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

这是费用表。并不是每一天都填满了每个类别。

我使用另一个表来存储类别 ID 的表名称。

我获取 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 选择传输到数据透视表,其中行将是日期,数据列将是类别,表数据将是费用总和。像这样:

      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 代码:{

我尝试了几种方法,但都没有成功。我只知道程序编码,OOP 超出了我的知识范围。

我发现的所有信息/教程都只关注有限的类别,而我尝试创建代码,根据检索到的类别数量创建表列的数量(理解无限)。

有人可以帮我设计用于检索数据透视表的 PHP 代码吗?

最佳答案

考虑到您的数据库结果$resultTraversable并且您的获取模式是assoc:

foreach($result as $row)
{
   $table[$row["expense_date"]][$row["category_name"]] = $row["price"];
}

在新的费用日期之前,您还可以使用“X”初始化所有类别字段,以使它们已存在于$table数组中或当您在矩阵中未设置的字段上输出表格时,您可以即时执行此操作。

与汇总列相同,您需要创建总和(或者您已经在 SQL 查询中执行此操作,应该可以使用 UNION 实现)。

关于php - php sql 中包含日期、变量类别和总和值的数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27648325/

相关文章:

javascript - 根据下拉选择自动填充文本框(laravel)

php - 如果当前日期和时间已过,如何更改文本颜色?

php - 在 PHP 中使用 DOMCrawler 从下拉框中选择一个选项

java - 数据库时区问题

python - python daskivot_table和pandasivot_table之间的区别

php - 从 Mysql DB 回显 php 变量

mysql - 在 InnoDB 表上使用 ZF2 分页器的 Count() 的糟糕性能

mysql - 如何查看触发器中的最终 MySQL 列值,即使它不是更新数据的一部分?

mysql查询以矩阵形式拉取数据

MySQL 的所有和空白计数