2010-12-10 171 views
2

我有一个包含名称,电子邮件,dob,性别,网站和其他信息的用户信息的数据库设置。如何从MySQL数据库中筛选基于年龄的结果

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

问题是我不知道如何按年龄过滤,因为我存储的年龄值作为出生日期,我有一个PHP函数来从它的年龄,但我怎么去做这件事。

筛选选项年龄:12-24,25-32,33-56(年)

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

过滤器被保存在session变量$_SESSION['age'] = 12-24我要如何从会议后来过滤器的第一个值(12)和最后一个值(24),以便年龄应大于12和小于24

请帮我一把。

+0

dob被索引? – 2010-12-10 09:03:15

回答

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

工作完美,谢谢。 :) – 2010-12-10 09:36:15

-1
  1. 从现在开始减去生日来得到年龄,然后再比较。

  2. 使用数组中的选择(而不是文本,在)作为查找的价值得到青睐的范围。

+0

这会有所帮助,但是您可以用任何方式写入并在MySQL语句中显示它吗? – 2010-12-10 09:03:04

+0

如果您在Google中键入“mysql减去两个日期”,第一个结果将是MySQL手册页,其中包含用于执行该操作的函数以及其他许多日期事项。 – 2010-12-10 09:07:02

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

为什么你除以1000? – 2010-12-10 09:04:21

+0

20101210 - 19760306 = 340904 ..我只有34虽然..并不知道'datediff' – harpax 2010-12-10 09:18:19

+0

我不认为MySQL会将日期转换为整数,并减去它们,是吗? – 2010-12-10 09:38:27

-1

,如果你想在差异变量都值,那么你应该试试这个。

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

现在阵列$sessArr你有数组$sessArr[0] and $sessArr[1]. 两个值你可以试试这个它可能有帮助你。

-1

,应该工作(没有测试它 ')

$ _SESSION [' 年龄'] = “12-24”;

$ agroup1 = split($ _ SESSION ['age'],' - ');

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

$查询= “ - 12 年(DOB)> =年(CURDATE()) - 从用户那里 年(DOB)< =年(CURDATE())SELECT * 24”;

0

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

MySQL的这个expresssion是

TIMESTAMPDIFF(YEAR, date_of_birth, current_date) 

它会产生一个整数,并处理截断和正确闰年。 (经过日365.25分不一定得到这个权利。)