рассчитать возраст в SQL - PullRequest
0 голосов
/ 29 января 2019

в моей таблице есть столбцы: год, месяц, день в таблице пользователей. Я хочу рассчитать и выбрать пользователей, чей возраст составляет 18–27 лет. Я пытался использовать DATEDIFF () AND CONCAT() sql функция для объединения столбцов дня рождения (год, месяц, день), но это мне не помогает.Я проверил DATEDIFF () из W3schools.org , в котором говорится, что 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 голосов
/ 29 января 2019

Просто используйте TIMESTAMPDIFF () вместо функции:

AND m.gender ='{$sex}'
AND ( 
    TIMESTAMPDIFF(YEAR, CONCAT(m.year,'-',m.month,'-',m.day),'{$date}')  BETWEEN {$ageMin} AND {$ageMax}
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...