如何根据MySQL数据库中的年龄过滤结果

时间:2010-12-10 08:55:46

标签: php mysql

我的数据库设置包含用户信息,包括姓名,电子邮件,dob,性别,网站和其他信息。

我正在尝试为用户页面实现过滤结果选项。

问题是我不知道如何按年龄过滤,因为我将年龄值存储为出生日期,我有一个PHP函数来从中获取年龄,但我该怎么做呢。 / p>

过滤选项为年龄:12-24岁,25-32岁,33-56岁(以年为单位)

我该怎么做? select * from users where user.age <= 20 and >= 20我甚至没有年龄栏,我只有出生日期。

过滤器存储在会话变量$_SESSION['age'] = 12-24中如何从会话中获取第一个值(12)和最后一个值(24)以及稍后过滤,以便年龄应大于12且小于24

请帮帮我。

6 个答案:

答案 0 :(得分:5)

SELECT * FROM table WHERE DATEDIFF(CURRENT_DATE, dob) >= (12 * 365.25) AND DATEDIFF(CURRENT_DATE, dob) <= (24 * 365.25)

答案 1 :(得分:0)

日历年龄:2016-02-28上出生的人在2017-02-27上为0岁,在2017-02-28上为1岁。 2016-02-29上出生的人在2017-02-28上为0岁,在2017-03-01上为1岁。 (闰年)。

MySQL对此的表达是

   TIMESTAMPDIFF(YEAR, date_of_birth, current_date)

它产生一个整数,并正确处理截断和闰年。 (过去几天的365.25分区并不一定是正确的。)

答案 2 :(得分:-1)

  1. 从现在开始减去生日,以获得年龄,然后进行比较。

  2. 使用select(而不是 text value )的值作为数组中的查找,以获取年龄范围。

答案 3 :(得分:-1)

SELECT (FLOOR((CURDATE() - `birthfield`) / 10000)) as `age` FROM `tablename` WHERE `age` <= 20 AND ..

答案 4 :(得分:-1)

如果你想在diff变量中获得两个值,那么你应该尝试这个。

$sessArr = array();
$sessArr = explode('-',$_SESSION['age']);

现在在数组$sessArr中,您在数组$sessArr[0] and $sessArr[1].中同时拥有两个值 您可以尝试这可能对您有所帮助。

答案 5 :(得分:-1)

应该有用(尚未测试过)

  

$ _ SESSION ['age'] =“12-24”;

     

$ agroup1 =   分裂($ _ SESSION [ '年龄'], ' - ');

     

$ min = $ agroup1 [0]; $ max =   $ agroup1 [1];

     

$ query =“select * from users where   年(dob)&lt; =年(curdate()) - 12和   年(dob)&gt; =年(curdate()) - 24“;