php - 查询或 PHP 中 mysql 的列总计?

标签 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二月, 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/

相关文章:

mysql - Amazon EC2 MySQL 由于内存不足而崩溃的问题,如何解决?

php - 通过id获取MYSQL行并在表单中编辑和更新?

php - SQL 语法错误/无效查询 - WAMP、phpMyAdmin

php - PHP MVC 中的 BaseModel,好还是坏?

PHP尴尬的函数声明

MySQL - EER 表中的双主键

php - 在marquee中显示mysql数据

mysql - 查找 sku、平均利润并与另一个表连接

java - c3p0 getConnection 在连接数增加时挂起

mysql - 返回 future 的营业时间