用SQL计算年龄

时间:2019-01-28 21:55:44

标签: php mysqli

在我的表中,用户表中有列:年,月,日 我想计算并选择年龄在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";
}

1 个答案:

答案 0 :(得分:1)

只需使用TIMESTAMPDIFF()函数:

AND m.gender ='{$sex}'
AND ( 
    TIMESTAMPDIFF(YEAR, CONCAT(m.year,'-',m.month,'-',m.day),'{$date}')  BETWEEN {$ageMin} AND {$ageMax}
)