我的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 ie 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中通过在提取值时添加值来实现这一点,但我可以在查询中实现吗?这样做有好处吗?
提前感谢您提供的帮助。
对我来说,这是一个奇怪的数据库布局,但我通常使用基于行的方法:
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个月是总数。
很难说,它取决于代码的其余部分。你对结果做了什么?只是输出它们?查询有多复杂?
在任何情况下,我都会GROUP BY location, month ORDER BY month
,然后在PHP中循环结果行来构建表。(如果某个位置缺少任何月份,则不会返回任何内容,因此请务必小心。)