从保存为日期的字段中选择年龄范围


PHP age range selection from a field saved as a date

我一直有一些麻烦查询年龄范围从下拉选项(1-99),我只是开始困惑自己看它一遍又一遍。

一些上下文:一所学校的在线学生列表,我使用bootstrap。

如果我能算出"from an age",那么"to age"应该不会太难,所以我只关注第一部分。

代码:

<div class="form-group">
   <label for="from_age">From Age</label>
   <select class="form-control" name="from_age" id="from_age">
       <option value="">-- Choose an Age --</option>
       <? for ($i = 1; $i <= 99; $i++) { ?>
          <option value="<?= $i; ?>"><?= $i; ?></option>
       <?}?>
   </select>
</div>

后面的代码…这是查询的一部分,我有麻烦。这条链中的所有其他查询都可以正常工作。这顺便添加了查询的WHERE部分。

if ($_REQUEST['from_age']) {
   $query .= " And DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW()) - TO_DAYS(student.dob)), '%Y') >= '".($_REQUEST['from_age'])."'";
   $link_params .= "&from_age=".$_REQUEST['from_age'];
}

数据库中的student表将"dob"(出生日期)存储为date(1985-05-20)。

我尝试过这样的东西,但我知道逻辑是错误的,它会尝试只搜索年份。对于如何解决这个问题,我还是一片空白。

And FROM_DAYS(TO_DAYS(CURDATE()) - TO_DAYS(student.dob)) + DATE_FORMAT(CURDATE(), '%Y') >= ".($_REQUEST['from_age'] + date("Y"))." ";

您可以使用MySQL DATEDIFF函数来计算用户的dob与MySQL CURDATE()函数的差值。

+------+---------------------+
| name | dob                 |
+------+---------------------+
| Joe  | 2000-08-02 05:15:17 |
| John | 1978-08-02 00:15:00 |
| Jake | 2015-07-07 00:00:00 |
+------+---------------------+
查询

select users.name ,floor(DATEDIFF(CURDATE(),users.dob )/365) as active_days
from users;

输出
+------+-------------+
| name | active_days |
+------+-------------+
| Joe  |          15 |
| John |          37 |
| Jake |           0 |
+------+-------------+

或者您可以将用户选择的日期提供给您的查询并计算日期。