我的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中执行此操作但是我可以执行查询 - 这样做是否有优势?
提前感谢您提供的帮助。
答案 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中循环结果行来构建表。 (如果某个地方缺少任何月份,则不会返回任何内容,因此请务必注意。)