Php 阵列数据计算

Php 阵列数据计算,php,mysql,sql,arrays,multidimensional-array,Php,Mysql,Sql,Arrays,Multidimensional Array,我遇到了处理多维数组的问题。下面是存储从mysql到数组的所有数据查询的代码。我可以知道如何计算多维数组中有多少个不同的模块名,并将状态分为两列,分别为延迟和当前状态吗?SQL查询从存储所有ModuleName和不同状态的复杂表中获取数据。我需要将它们分类并显示在表格中。因此,基本上我需要检查阵列中有多少个模块,以及模块有多少个延迟或存在 while($array = mysql_fetch_array($result)){ $list[] = array(

我遇到了处理多维数组的问题。下面是存储从mysql到数组的所有数据查询的代码。我可以知道如何计算多维数组中有多少个不同的模块名,并将状态分为两列,分别为延迟和当前状态吗?SQL查询从存储所有ModuleName和不同状态的复杂表中获取数据。我需要将它们分类并显示在表格中。因此,基本上我需要检查阵列中有多少个模块,以及模块有多少个延迟或存在

while($array = mysql_fetch_array($result)){
        $list[] = array(
                        "ModuleName"=>$array['ModuleName'],
                        "status"    =>$array['Status']
            ); 
    }

这是预期结果的样本


按模块名称更新为分组

SELECT ModuleName
      ,COUNT(*) AS module_count
      ,SUM(CASE WHEN Status != 'Present' THEN 1 ELSE 0 END) as late_count
      ,SUM(CASE WHEN Status  = 'Present' THEN 1 ELSE 0 END) as present_count
  FROM ( your original query )
 GROUP BY ModuleName
只需将“原始查询”替换为用于检索数组中数据的SQL

原创

SELECT COUNT(*) AS module_count
      ,SUM(CASE WHEN Status != 'present' THEN 1 ELSE 0 END) as late_count
      ,SUM(CASE WHEN Status  = 'present' THEN 1 ELSE 0 END) as present_count
  FROM ( your original query )

$counts[$array['Status']]+
?那么,您希望输出为一行,包含3列(模块计数、延迟、当前)?您能否共享SQL以检索数据和底层数据结构?我猜这可能很容易在您的SQL查询中执行。@MarcB这不起作用,因为我需要根据模块名称来获取延迟多少和当前多少。因此
$counts[$array['ModuleName']][$array['Status']]+
..@MarcB Not working bro~状态不同~如果数组存储的值不同,您将如何计数?它只会得到我从SQLgreat到c的相同行。无论如何,我使用了这个sql查询来提取数据。因为这个数据库设计非常混乱。所以最后我加入了一些表格来获取所有的信息。从类中选择*,a.AttendanceID作为id,作为c,作为a,作为i,其中a.StudentID=“TP000001”和a.ClassID=c.ClassID和c.InchargeID=i.InchargeID限制0,30非常感谢。这很有帮助。是否有办法同时过滤模块和状态=D如果我没有得到错误的信息,当前sql是从同一个模块中筛选状态,对吗?我不太确定你要的是什么。如果您能1)显示示例数据,2)显示预期结果,3)显示当前SQL,这将非常有帮助。我想知道ModuleName应该替换为我在上面显示的图片“ModuleName”,对吗?模块数量、延迟数量和当前数量是存储模块数量、延迟数量和当前数量的变量?问题是我在前面的评论中显示的sql查询,我提取了所有与学生相关的模块和出勤情况。因此,数据可能具有不同的模块名称和状态。