我有一张桌子,用于存储我的客户姓名和出生日期。例如下面:
name DOB gender email
Tony 1987-04-20 male tony@tony.com
Susan 1985-06-13 female susan@susan.com
在我的网站上,我想根据他们的DOB搜索用户并显示为年龄范围(18岁,18-25岁,26-35岁,36-45岁,46-55岁和55岁以上)
对托尼和苏珊来说,他们将属于26-35类别。在我的网站上,我希望有一个表格,按年龄范围显示名称,如下所示。Under 18 18-25 26-35 36-45 46-55 Over 55
xxx xxx Tony xxx xxx xxx
xxx xxx Susan xxx xxx xxx
使用PHP如何从D.O.B找到年龄范围?
答案 0 :(得分:1)
尝试以下代码
foreach($rows as $row){
$d1 = new DateTime($row->DOB);
$d2 = new DateTime(date("Y-m-d"));
$diff = $d2->diff($d1);
echo $diff->y;
}
答案 1 :(得分:1)
我有一个例子,您可以了解如何做到
步骤:1
SELECT
round(DATEDIFF(CURRENT_DATE,t.birthdate)/365) AS ageInYears,
name
FROM member t
从表格成员
获取姓名和年龄
步骤:2
SELECT
(`ageInYears` > 40) as `data1`
,name
FROM (step: 1) as t
创建的列'data1'年龄为> 40,您在年龄比较中创建多个列,例如
ageInYears
< 18)data1
,(ageInYears
> 18和ageInYears
< 25){{1 }}
步骤:3
data2
使用if条件创建第35至40栏和第0至35行,以检查'data1'= 1的位置,如果不是1,则将名称放在
最终结果
SELECT
MAX(IF(`data1` = 1,name,null)) '35to40',
MAX(IF(`data1` = 0,name,null)) '0to35'
From (step 2) as t group by name
O / P
SELECT
MAX(IF(`data1` = 1,name,null)) '35to40',
MAX(IF(`data1` = 0,name,null)) '0to35'
From (SELECT
(`ageInYears` > 40) as `data1`
,name
from ( SELECT
round(DATEDIFF(CURRENT_DATE,t.birthdate)/365) AS ageInYears
,name
FROM member t) as t) as t group by name