在php sql中使用日期,变量类别和总和值的数据透视表

时间:2014-12-25 15:03:13

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

我尝试了几种方法,非成功。我只知道程序编码,OOP是我的知识。

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

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

1 个答案:

答案 0 :(得分:0)

认为您的数据库结果$result可遍历,您拥有的获取模式是:

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

在新的费用日期之前,您还可以使用"X"初始化所有类别字段,以便将它们放在$table数组中,或者在输出时动态执行此操作关于矩阵中未设置字段的表格。

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