Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何根据比较将整个结果查询划分为类别?_Php_Mysql - Fatal编程技术网

Php 如何根据比较将整个结果查询划分为类别?

Php 如何根据比较将整个结果查询划分为类别?,php,mysql,Php,Mysql,我的MySQL知识仅限于最基本的知识,但今天我需要完成一项复杂的任务,我不知道如何完成以下任务: 我有一个包含三列的表格:SEX、SITUATION和NUMBER。此表给出了多少人是男性/女性,如果他们仍然活跃,以及他们所在部门有多少人(这些是其他列,但没有用) 所以,如果我从这个表中随机抽取一行,我可以得到 ( [SEX] => 'FEMALE', [SITUATION] => 'ACTIVE', [NUMBER] => 198 ) 我的目标是,当

我的MySQL知识仅限于最基本的知识,但今天我需要完成一项复杂的任务,我不知道如何完成以下任务:

我有一个包含三列的表格:
SEX
SITUATION
NUMBER
。此表给出了多少人是男性/女性,如果他们仍然活跃,以及他们所在部门有多少人(这些是其他列,但没有用)

所以,如果我从这个表中随机抽取一行,我可以得到

(
    [SEX] => 'FEMALE',
    [SITUATION] => 'ACTIVE',
    [NUMBER] => 198
) 
我的目标是,当我执行SQL请求时,它将返回4个“组”,其中包含“可能性:有多少人是活跃女性、退休女性、活跃男性和退休男性”。我猜结果如下所示:

( 
    [active_women] => 8452,
    [retired_women] => 123,
    [active_men] => 9523,
    [retired_men] => 876
)
这是我用PHP处理结果的方式,如果它能帮助您:

// $results contains the result of "SELECT SEX, NUMBER, SITUATION FROM table";
foreach($results as $i => $result) {
  if($result->SEX === 'MAN') {
    if($result->SITUATION === 'ACTIVE') {
      $stat1['active_men'] += $result->NUMBER;
    }
    else {
      $stat1['retired_men'] += $result->NUMBER;
    }

  }
  elseif ($result->SEX === 'WOMAN') {
    if($result->SITUATION === 'ACTIF') {
      $stat1['active_women'] += $result->NUMBER;
    }
    else {
      $stat1['retired_women'] += $result->NUMBER;
    }
  }
}

欢迎任何帮助,请提前感谢

您可以在MySQL中使用条件聚合来处理此计算

SELECT
    SUM(CASE WHEN SEX = 'FEMALE' AND SITUATION = 'ACTIVE'
             THEN NUMBER ELSE 0 END) AS active_women,
    SUM(CASE WHEN SEX = 'FEMALE' AND SITUATION = 'RETIRED'
             THEN NUMBER ELSE 0 END) AS retired_women,
    SUM(CASE WHEN SEX = 'MALE'   AND SITUATION = 'ACTIVE'
             THEN NUMBER ELSE 0 END) AS active_men,
    SUM(CASE WHEN SEX = 'MALE'   AND SITUATION = 'RETIRED'
             THEN NUMBER ELSE 0 END) AS retired_men
FROM yourTable

您也可以像在PHP中一样继续操作,但如果在聚合数据时出错,这将是一项艰巨的任务,而且可能会出错。

您可以在MySQL中使用条件聚合来处理此计算

SELECT
    SUM(CASE WHEN SEX = 'FEMALE' AND SITUATION = 'ACTIVE'
             THEN NUMBER ELSE 0 END) AS active_women,
    SUM(CASE WHEN SEX = 'FEMALE' AND SITUATION = 'RETIRED'
             THEN NUMBER ELSE 0 END) AS retired_women,
    SUM(CASE WHEN SEX = 'MALE'   AND SITUATION = 'ACTIVE'
             THEN NUMBER ELSE 0 END) AS active_men,
    SUM(CASE WHEN SEX = 'MALE'   AND SITUATION = 'RETIRED'
             THEN NUMBER ELSE 0 END) AS retired_men
FROM yourTable

您也可以像在PHP中一样继续操作,但如果在聚合数据时出错,这将非常费劲,而且可能容易出错。

是的,我认为这是正确的答案,您只需要在PHP中显示结果,而不需要再次尝试进行所有处理。只需循环结果并显示!因此我尝试d你的代码,它几乎满足了我的需要,但是它计算了“女性”、“活动”等的迭代次数,但不计算数字。是否有可能,以某种方式,将它们各自对应的
数字
相加(在我的示例中,
数字
等于198)@Jaeger我想知道
NUMBER
的意义是什么,你是想统计还是只统计人数。谢谢你的澄清。@Jaeger我想知道
NUMBER
的意义是什么,你是想统计还是只统计人数。谢谢你的分类。非常感谢,不是这样的毕竟这并不难(但我想我自己也不会发现)是的,我认为这是正确的答案,你只需要在PHP中显示结果,而不是尝试再次进行所有处理。只需循环结果并显示!因此我尝试了你的代码,它几乎满足了我的需要,但是它计算了“女性”、“活动”等的迭代次数,而不是数字。不知何故,是否有可能嗯,它们各自对应的
NUMBER
(在我的示例中,
NUMBER
等于198)@Jaeger我想知道
NUMBER
的意义是什么,你是想统计还是只统计人数。谢谢你的澄清。@Jaeger我想知道
NUMBER
的意义是什么,你是想统计还是只统计人数。谢谢你的分类。非常感谢,不是这样的毕竟这并不难(但我想我自己也不会发现)