在我的表中,用户表中有列:年,月,日 我想计算并选择年龄在18到27之间的用户 我尝试使用 DATEDIFF()和 CONCAT() sql函数来连接生日列(年,月,日),但这对我没有好处。 我检查了W3schools.org中的 DATEDIFF(),其中指出 DATEDIFF()接受了3个参数,而mariaDB说了2个参数。
但是当我尝试w3schools时,他们想要达到的结果就是这样。
请问我该如何实现?或另一种在SQL中执行此操作的方法
$onlineAt = strtolower($_POST['online_at']);
$ageMin = $_POST['age_min'];
$ageMax = $_POST['age_max'];
$sex = $_POST['sex'];
$countryCode = $_POST['country'];
$time = time(); $CUid = getCuID();
$onlineAt = ( $onlineAt == 'now' ? 5: ($onlineAt == 'today' ? 1440:1441)); //minutes
$date = date('Y-m-d');
//sql to fetch people
$sql = "SELECT *
FROM (
SELECT m.last_activity_time lat ,
m.user_id,
m.firstname,
m.lastname,
m.username,
m.course,
m.about,
m.user_group FROM
$main_table m
WHERE ((($time - m.last_activity_time) /60) < {$onlineAt})
AND m.gender ='{$sex}' AND (
FLOOR(DATEDIFF(CONCAT(m.year,'-',m.month,'-',m.day),'{$date}')) BETWEEN {$ageMin} AND {$ageMax}
)
) AS sub WHERE user_id !='{$CUid}' ORDER BY RAND() LIMIT 20";
$query = queryDB($sql);
//die(mysqli_error($conn));
if (mysqli_num_rows($query)) {
var_dump(mysqli_num_rows($query));
while ($row = mysqli_fetch_array($query)) {
//code
}
}else{
echo "no result";
}
答案 0 :(得分:1)
只需使用TIMESTAMPDIFF()函数:
AND m.gender ='{$sex}'
AND (
TIMESTAMPDIFF(YEAR, CONCAT(m.year,'-',m.month,'-',m.day),'{$date}') BETWEEN {$ageMin} AND {$ageMax}
)