我一直有一些麻烦查询年龄范围从下拉选项(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 |
+------+-------------+
或者您可以将用户选择的日期提供给您的查询并计算日期。