从查询或PHP中的mysql列总计?

时间:2012-08-02 08:31:36

标签: php mysql

我的php页面上有一个表,其中填充了来自单个表的MySQL查询的数据

表格如下:

Location    Jan Feb Mar etc…    Total
Location1   5   13  7       25
Location2   10  10  6       26  
Location3   22  1   7       29
Etc…

“总计”由查询使用Sum计算,即SUM(IF(month = '1', 1,0)) AS 'jan', SUM(IF(month = '2', 1,0)) AS feb , SUM(IF(month = '3', 1,0))

我想要的是每列的总数(1月,2月,3月等)

我可以通过在提取时添加值来在PHP中执行此操作但是我可以执行查询 - 这样做是否有优势?

提前感谢您提供的帮助。

2 个答案:

答案 0 :(得分:1)

对我来说,这是一个奇怪的数据库布局,但我通常使用基于行的方法:

location   | month | total |
loc1       |   1   |  3    |
loc2       |   1   |  4    |
loc1       |   2   |  7    |
etc...

使总数等更容易执行。

但是,考虑到你的结构,你可以继续做你正在做的事情或使用一点点技巧。如果你在PHP中做更多的工作(除了总数),你可以轻松地在SQL中执行concat()并获得准备好explode()的预格式化字符串 - 编入数组。从那里你可以使用PHP中所有精彩的数组函数来获得总数或你喜欢的任何其他东西。

编辑:对,这有所不同。

如果您使用基于行的常规方法来存储数据,则可以使数据库完成所有工作。如果你需要一个查询来获得个别月份和总数,你当然可以用PHP做,但你也可以这样做一个小技巧:

select
    month, // assuming 1-12 for example
    sum(someData)
from
    yourTable
where
    someCondition=1
group by
    month
union all
select
    13 as month, // assuming 1-12 for example
    sum(someData)
from
    yourTable
where
    someCondition=1
group by
    month

如果你有一个拥有大量免费CPU的数据库,但是网络服务器正在挣扎,或者你需要计算大量的数据,这很方便。只需让数据库执行运算并将其返回为您可以在PHP代码中识别的特定数字 - 月份1-12将是正常的,第13个月是总计。

答案 1 :(得分:0)

太难说了,这取决于代码的其余部分。你在做什么结果?只是输出它们?查询有多复杂?

在任何情况下,我都会GROUP BY location, month ORDER BY month然后在PHP中循环结果行来构建表。 (如果某个地方缺少任何月份,则不会返回任何内容,因此请务必注意。)