PHP:filter:从生日开始计算年龄,在xx和xx之间
经过一些研究,我自己几乎负担不起,我得到了以下结论:PHP:filter:从生日开始计算年龄,在xx和xx之间,php,Php,经过一些研究,我自己几乎负担不起,我得到了以下结论: $query .= "SELECT * FROM users WHERE birthday < SUBDATE(NOW(), INTERVAL BETWEEN $min AND $max YEAR)"; 但我做错了什么,也许你们不能在这段时间内做,或者什么地方出了问题 恰好-BETWEEN是一个布尔运算符,这意味着它返回一个布尔值(true或false),而INTERVAL需要一个整数 WHERE birthday BE
$query .= "SELECT * FROM users WHERE birthday < SUBDATE(NOW(), INTERVAL BETWEEN $min AND $max YEAR)";
但我做错了什么,也许你们不能在这段时间内做,或者什么地方出了问题
恰好-BETWEEN
是一个布尔运算符,这意味着它返回一个布尔值(true或false),而INTERVAL
需要一个整数
WHERE birthday
BETWEEN SUBDATE(NOW(), INTERVAL $max YEAR)
AND SUBDATE(NOW(), INTERVAL $min YEAR)
还有一个警告-最好正确转义这些变量(使用mysql\u escape\u string
)
还要注意:使用NOW()意味着您将包括17年23小时前出生的人,但不包括18年零1小时前出生的人。这不是我们通常所说的“生日”——你最好使用TODAY()
而不是NOW()
然而,今天的
TODAY()
,还有另一个问题:之间的是包容性的;因此,在18岁到20岁之间,你没有2年的时间,而是2年零1天。通过将在
之间拆分并进行正常比较(生日>..和生日来克服这一问题
之间的SQL行在它之后只带两个参数。您可以说在$min和$max之间
,而不是在$min和$max之间
如果将日期存储为MySQL日期,而不是INT或字符串,则MySQL函数可以使用月(日期)
,年(日期)
等来解释部分日期
试着通读一遍,看看它是否对你有帮助。如果它是一个选项,我会说删除杂乱的内容,修改mysql列,或者创建一个将出生日期保存为整数的列。例如,现在的1991-12-01应该是19911201。这样你就可以使用如下内容:
SELECT * FROM users WHERE birthday >= min AND birthday <= max
SELECT*FROM user WHERE birth>=min AND birth+1 Good answer=)我通常从MySQL获取值并用PHP解析它们,所以我不太擅长让MySQL为我解析。我不喜欢解析日期-每当我获取日期时,我几乎总是从UNIXTIME(time)获取UNIX\u时间戳(field)
,并存储
…您好。很好的解决方案。你能举一个使用TODAY()的例子吗,因为我想排除尽可能少的人。其中生日>=子日期(TODAY(),INTERVAL$max YEAR)和生日<子日期(TODAY(),INTERVAL$min YEAR)
,其中$min
比用户输入的少一个;(例如,对于18和22,$max
是22,$min
是17)我正在获取功能。今天不存在
SELECT * FROM users WHERE birthday >= min AND birthday <= max