2015-12-02 133 views
0

我有一张表,用于存储我的客户姓名和出生日期。例如下面:出生日期到使用PHP的年龄范围

name  DOB   gender  email 
Tony  1987-04-20 male  [email protected] 
Susan  1985-06-13 female  [email protected] 

在我的网站,我想根据自己的出生日期,并显示为年龄范围是这样的(在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的年龄范围?

+1

你自己写了什么代码?告诉我们你已经尝试过什么,人们可以帮助你。 – MeanGreen

+0

Mysql我猜?已经查询了? – giorgio

+0

检查我的答案你得到你怎么办@nodeffect –

回答

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)作为data2

步骤:3

SELECT 
    MAX(IF(`data1` = 1,name,null)) '35to40', 
    MAX(IF(`data1` = 0,name,null)) '0to35' 
    From (step 2) as t group by name 

创建的列35to40和0to35使用if条件,以检查其中 'DATA1'= 1,并把有名称,如果不为1比空

最终结果

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 

O/p

35to40  0to35 
NULL asdasd 
dhara NULL 
NULL g 
ravi NULL 
sonam NULL 
+0

我已经创建了两列,你可以做所有只需要一些额外的努力 –

+0

这有助于很多谢谢你... – nodeffect

1

试试下面的代码

 foreach($rows as $row){ 
      $d1 = new DateTime($row->DOB); 
      $d2 = new DateTime(date("Y-m-d")); 

      $diff = $d2->diff($d1); 

      echo $diff->y; 

     }