Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.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表,persons,有3列,id,name,出生日期。 我的表有大约100行数据,但这可能会增加 我想使用PHP根据年龄组输出人员,因此: 20-25: 10 26-35: 15 36-45: 12 46-55: 20 55+: 30 现在,我正在使用PHP通过以下代码获取所有出生日期: $sql2 = "SELECT date_of_birth FROM persons"; $result2 = $conn->query($sql2); while($row2 = $

我有一个MySQL表,
persons
,有3列,
id
name
出生日期
。 我的表有大约100行数据,但这可能会增加

我想使用PHP根据年龄组输出人员,因此:

20-25: 10
26-35: 15
36-45: 12
46-55: 20
55+: 30
现在,我正在使用PHP通过以下代码获取所有出生日期:

$sql2 = "SELECT date_of_birth FROM persons";
$result2 = $conn->query($sql2);
while($row2 = $result2->fetch_assoc()) {
    $date_of_birth = explode('-', $row2['date_of_birth']);
    $year = $date_of_birth[0];
    $month = $date_of_birth[1];
    $day = $date_of_birth[2];
    echo 'Year of Birth: '.$year.'<br>';
}
$sql2=“从人员中选择出生日期”;
$result2=$conn->query($sql2);
而($row2=$result2->fetch_assoc()){
$date_of_birth=爆炸('-',$row2['date_of_birth']);
$year=$date\u出生日期[0];
$month=$date\u出生日期[1];
$day=$date\u出生日期[2];
回声“出生年份:'.$Year.”
; }
有人能指导我正确的方向来处理按年龄分组的结果吗

我确实在另一个SO线程中发现了这一点,但不确定它在上面的上下文中是否有用:
选择TIMESTAMPDIFF(YEAR,'1970-02-01',CURDATE())作为age

尝试以下方法:

$count_20_25 = 0;
$count_26_35 = 0;
$count_36_45 = 0;
$count_46_55 = 0;
$count_above_55 = 0;
$curr_year = date('Y');

$sql2 = "SELECT date_of_birth FROM persons";
$result2 = $conn->query($sql2);
while($row2 = $result2->fetch_assoc()) {
    $date_of_birth = explode('-', $row2['date_of_birth']);
    $year = $date_of_birth[0];
    $month = $date_of_birth[1];
    $day = $date_of_birth[2];
    $temp = abs($curr_year - $year);
    if($temp >= 20 && $temp <= 25)
    {
        $count_20_25++;
    }
    elseif($temp >= 25 && $temp <= 35)
    {
        $count_26_35++;
    }
    elseif($temp >= 36 && $temp <= 45)
    {
        $count_36_45++;
    }
    elseif($temp >= 46 && $temp <= 55)
    {
        $count_46_55++;
    }
    else
    {
        $count_above_55++;
    }
}

echo '20-25: '.$count_20_25.'<br>';
echo '26-35: '.$count_26_35.'<br>';
echo '36-45: '.$count_36_45.'<br>';
echo '46-55: '.$count_46_55.'<br>';
echo '55+: '.$count_above_55.'<br>';
$count\u 20\u 25=0;
$count_26_35=0;
$count\u 36\u 45=0;
$count_46_55=0;
$count_高于_55=0;
$curr_year=日期('Y');
$sql2=“从人员中选择出生日期”;
$result2=$conn->query($sql2);
而($row2=$result2->fetch_assoc()){
$date_of_birth=爆炸('-',$row2['date_of_birth']);
$year=$date\u出生日期[0];
$month=$date\u出生日期[1];
$day=$date\u出生日期[2];
$temp=abs($curr\u year-$year);
如果($temp>=20&&$temp=25&&$temp=36&&$temp=46&&$temp请尝试以下操作:

$count_20_25 = 0;
$count_26_35 = 0;
$count_36_45 = 0;
$count_46_55 = 0;
$count_above_55 = 0;
$curr_year = date('Y');

$sql2 = "SELECT date_of_birth FROM persons";
$result2 = $conn->query($sql2);
while($row2 = $result2->fetch_assoc()) {
    $date_of_birth = explode('-', $row2['date_of_birth']);
    $year = $date_of_birth[0];
    $month = $date_of_birth[1];
    $day = $date_of_birth[2];
    $temp = abs($curr_year - $year);
    if($temp >= 20 && $temp <= 25)
    {
        $count_20_25++;
    }
    elseif($temp >= 25 && $temp <= 35)
    {
        $count_26_35++;
    }
    elseif($temp >= 36 && $temp <= 45)
    {
        $count_36_45++;
    }
    elseif($temp >= 46 && $temp <= 55)
    {
        $count_46_55++;
    }
    else
    {
        $count_above_55++;
    }
}

echo '20-25: '.$count_20_25.'<br>';
echo '26-35: '.$count_26_35.'<br>';
echo '36-45: '.$count_36_45.'<br>';
echo '46-55: '.$count_46_55.'<br>';
echo '55+: '.$count_above_55.'<br>';
$count\u 20\u 25=0;
$count_26_35=0;
$count\u 36\u 45=0;
$count_46_55=0;
$count_高于_55=0;
$curr_year=日期('Y');
$sql2=“从人员中选择出生日期”;
$result2=$conn->query($sql2);
而($row2=$result2->fetch_assoc()){
$date_of_birth=爆炸('-',$row2['date_of_birth']);
$year=$date\u出生日期[0];
$month=$date\u出生日期[1];
$day=$date\u出生日期[2];
$temp=abs($curr\u year-$year);

如果($temp>=20&&$temp=25&&$temp=36&&$temp=46&&$temp,我将通过在MySQL查询本身中分配年龄组来处理此问题,然后让PHP显示结果集。您可以尝试以下查询:

SELECT t.age_group, COUNT(*) AS age_count
FROM
(
    SELECT
        CASE WHEN TIMESTAMPDIFF(YEAR, date_of_birth, CURDATE()) BETWEEN 20 AND 25
             THEN '20-25'
             WHEN TIMESTAMPDIFF(YEAR, date_of_birth, CURDATE()) BETWEEN 26 AND 35
             THEN '26-35'
             WHEN TIMESTAMPDIFF(YEAR, date_of_birth, CURDATE()) BETWEEN 36 AND 45
             THEN '36-45'
             WHEN TIMESTAMPDIFF(YEAR, date_of_birth, CURDATE()) BETWEEN 46 AND 55
             THEN '46-55'
             WHEN TIMESTAMPDIFF(YEAR, date_of_birth, CURDATE()) > 55
             THEN '46-55'
             ELSE 'Other'
        END AS age_group
    FROM persons
) t
GROUP BY t.age_group
内部查询为每个记录分配一个年龄组,然后外部查询按年龄组聚合。请注意,嵌套子查询不是必需的,也不会对性能有多大好处,但用于避免在使用
group by
时重复丑陋的
大小写
表达式

然后使用以下PHP代码:

$sql2 = "...";  // use the above query
$result2 = $conn->query($sql2);
while ($row2 = $result2->fetch_assoc()) {
    $age_group = $row2['age_group']);
    $age_count = $row2['age_count']);
    echo $age_group.': '.$age_count;
}

我将通过在MySQL查询本身中分配年龄组来处理此问题,然后让PHP显示结果集。您可以尝试以下查询:

SELECT t.age_group, COUNT(*) AS age_count
FROM
(
    SELECT
        CASE WHEN TIMESTAMPDIFF(YEAR, date_of_birth, CURDATE()) BETWEEN 20 AND 25
             THEN '20-25'
             WHEN TIMESTAMPDIFF(YEAR, date_of_birth, CURDATE()) BETWEEN 26 AND 35
             THEN '26-35'
             WHEN TIMESTAMPDIFF(YEAR, date_of_birth, CURDATE()) BETWEEN 36 AND 45
             THEN '36-45'
             WHEN TIMESTAMPDIFF(YEAR, date_of_birth, CURDATE()) BETWEEN 46 AND 55
             THEN '46-55'
             WHEN TIMESTAMPDIFF(YEAR, date_of_birth, CURDATE()) > 55
             THEN '46-55'
             ELSE 'Other'
        END AS age_group
    FROM persons
) t
GROUP BY t.age_group
内部查询为每个记录分配一个年龄组,然后外部查询按年龄组聚合。请注意,嵌套子查询不是必需的,也不会对性能有多大好处,但用于避免在使用
group by
时重复丑陋的
大小写
表达式

然后使用以下PHP代码:

$sql2 = "...";  // use the above query
$result2 = $conn->query($sql2);
while ($row2 = $result2->fetch_assoc()) {
    $age_group = $row2['age_group']);
    $age_count = $row2['age_count']);
    echo $age_group.': '.$age_count;
}

哇,蒂姆-太不可思议了!非常感谢:-)我现在要做必要的调整。再次感谢你今天的时间。哇,蒂姆-太不可思议了!非常感谢:-)我现在要做必要的调整。再次感谢你今天的时间。