如何创建一个计算'age'根据用户的出生日期


How to create a select query calculating 'age' by user's date of birth?

我想做一个选择查询来搜索寻找最小和最大年龄之间的人。这就是搜索值如何来自我的搜索表单。

Array
(
    [iam] => Man
    [seeking] => Woman
    [age_min] => 18
    [age_max] => 19
    [country_id] => 25
)

我已经将这些值存储在两个mysql表中。一个是user,另一个是Countries。我的问题是在用户表中没有列来存储用户的年龄。年龄是根据用户的出生日期计算的,用户表中有一列存储用户的出生日期。

我的users表是这样的:

CREATE TABLE IF NOT EXISTS users (
    user_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
    country_id SMALLINT UNSIGNED NOT NULL,
    username VARCHAR(20) NOT NULL, 
    email varchar(40) NOT NULL,
    first_name VARCHAR(30) DEFAULT NULL,
    sex ENUM('Male', 'Female') DEFAULT 'Male',
    dob VARCHAR(10) NOT NULL, 
    address VARCHAR(40) DEFAULT NULL,
    city VARCHAR(25) NOT NULL,
    last_login TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
    date_registered TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (user_id),
    UNIQUE (email), 
    UNIQUE (username)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

在国家表中有country_idcountry_name

。我可以知道是否有一种方法可以使用MySql SELECT查询做到这一点。希望有人能帮帮我。谢谢你!

TIMESTAMPDIFF将为您获取两个日期的差值,因此基本上如果您传递dob和当前日期,它将获得您的年龄。

注意:请确保对输入进行消毒。

$Query = "SELECT * FROM users 
WHERE 
    TIMESTAMPDIFF(YEAR, dob, CURDATE()) >= '{$_POST['age_min']}' AND 
    TIMESTAMPDIFF(YEAR, dob, CURDATE()) <= '{$_POST['age_max']}' AND 
    sex = '{$_POST['seeking']}' AND 
    country_id = '{$_POST['country_id']}'";