php - 如何使用php数组将sql查询结果转换为数据透视表?

标签 php mysql pivot aggregate-functions

我正在尝试为图书馆预订系统创建一些统计数据。我的 sql 查询结果如下所示。

total_no_students| department  | property       | month  
 241             | Physics     | undergraduate  | Nov
 236             | Physics     | undergraduate  | Dec
 254             | Physics     | postgraduate   | Nov
 210             | Physics     | postgraduate   | Dec
 193             | Architecture| undergraduate  | Nov
 181             | Architecture| undergraduate  | Dec
 127             | Architecture| postgraduate   | Nov
 292             | Architecture| postgraduate   | Dec
 134             | Biology     | undergraduate  | Nov
 188             | Biology     | undergraduate  | Dec
 129             | Biology     | postgraduate   | Nov
 219             | Biology     | postgraduate   | Dec

我正在尝试使用 php 编写一些代码来创建具有以下外观的统计表:

    |Physics-undergrad|Physics-postgrad|Architecture-undergrad|Architecture-postgrad|
Nov |      241        |     254        |         193          |        127          |
Dec |      236        |     210        |         181          |        292          |

我必须使用数组和一些循环(foreach)通过 php(枢轴技术)对其进行转换。我尝试这样做,但我对嵌套循环感到困惑。

我编写的代码如下:

$csvArray = array();


$departments = array('Physics','Architecture','Biology');
$properties = array('undergraduate','postgraduate');

$con = mysqli_connect($mysql_hostname, $mysql_user, $mysql_password, $mysql_dbname);

$sql="SELECT count(id) as total_no_students, department, property, MONTH(table1.created) as month

FROM table1
left JOIN table2
ON table2.barcode=table1.input

group by department, property, month";

$res=mysqli_query($con,$sql);                                                   

while($row=mysqli_fetch_array($res)){

$time = $row['month'];

    if (!array_key_exists($time, $csvArray) ) {
        foreach ($departments as $department) {
            $csvArray[$department] = array();
            foreach($properties as $property) {
                $csvArray[$department][$property] = array();

            }
        }
    }
    $department = $row['department'];
    $property = $row['property'];
    $total_no_students = $row['total_no_students'];

    $csvArray[$time][$departments][$property] = $total_no_students;

}

有什么帮助如何将使用 php 的查询转换为上表吗?

最佳答案

select "month",
       SUM(case when department = 'Physics' and property = 'undergraduate' then total_no_students else 0 end) as "Physics-undergrad",
       [...]
from table_name
group by "month"

关于php - 如何使用php数组将sql查询结果转换为数据透视表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27687160/

相关文章:

php - 重写 PHP 中的魔术方法

php - fatal error : Class 'Swift_smtpTransport' not found in

php - 带有默认/后备图像的 WordPress 自定义 Logo

mysql - 在存储过程中使用变量

php - 数据库设计 - "Push"模型,或写时扇出

MySQL 动态数据透视表

php - 嵌入在 html 中的 JavaScript 未加载

mysql - Sqoop 增量导入和更新不起作用

sql-server - 如何在两列上使用动态列名进行 SQL PIVOT?

SQL Count 年的星期一星期二等