我的 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
二月, SUM(IF(month = '3', 1,0))
我想要的是每列的总计(一月、二月、三月等)
我可以在 PHP 中通过添加提取的值来完成此操作,但是我可以通过查询来完成此操作吗?这样做有什么优势吗?
预先感谢您提供的帮助。
最佳答案
对我来说,这是一种奇怪的数据库布局,但我通常使用基于行的方法:
location | month | total |
loc1 | 1 | 3 |
loc2 | 1 | 4 |
loc1 | 2 | 7 |
etc...
这使得总计等操作更容易执行。
但是,根据您的结构,您可以继续做您正在做的事情,也可以使用一些技巧。如果您在 PHP 中使用它进行更多工作(除了总数之外),您可以轻松地执行 concat()
在 SQL 中并获取一个预先格式化的字符串,该字符串已准备好 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,但网络服务器正在挣扎,或者您有大量数据需要统计,那么这会很方便。只需让数据库进行运算,并将其返回为您可以在 PHP 代码中识别的特定数字 - 1-12 个月是正常的,13 个月是总数。
关于php - 查询或 PHP 中 mysql 的列总计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11773728/