Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:filter:从生日开始计算年龄,在xx和xx之间_Php - Fatal编程技术网

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