我在我的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)) ASfeb, SUM(IF(month = '3', 1,0))的查询来计算合计
我想要的是每个列的总数(1月,2月,3月等)
我可以在PHP中通过在提取值时添加这些值来做到这一点,但是我可以在查询中这样做吗?这样做有什么好处吗?
提前感谢您的帮助。
发布于 2012-08-02 16:39:50
对我来说,这是一种奇怪的数据库布局,但我通常使用基于行的方法,如下所示:
location | month | total |
loc1 | 1 | 3 |
loc2 | 1 | 4 |
loc1 | 2 | 7 |
etc...这使得总和等更容易执行。
然而,给定你的结构,你可以继续做你正在做的事情,或者使用一些小把戏。如果你在PHP中做更多的工作(除了总数之外),你可以很容易地在SQL中做一个concat(),并得到一个预格式化的字符串,它可以被explode()-ed到一个数组中。在那里,您可以使用PHP中所有出色的数组函数来获取总计或其他任何您喜欢的函数。
编辑: Righto,这会有一些不同。
如果您使用普通的基于行的方法来存储数据,那么您可能可以让数据库来做所有的工作。如果您需要一个查询来获取单个月份和总计,您当然可以在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的数据库,但是一个正在挣扎的for服务器,或者你有非常大量的数据需要统计,这是很方便的。只需让数据库进行计算,并将其作为您可以在PHP代码中识别的某个特定数字返回- 1-12个月将是正常的,13个月是总数。
发布于 2012-08-02 16:39:36
很难说,这取决于代码的其余部分。你对结果做了什么?只是把它们输出?查询有多复杂?
在任何情况下,我都会GROUP BY location, month ORDER BY month,然后在PHP中循环结果行来构建表。(如果某个位置缺少任何月份,则不会返回任何内容,因此请务必注意这一点。)
https://stackoverflow.com/questions/11773728
复制相似问题