我想做一个选择查询来搜索寻找最小和最大年龄之间的人。这就是搜索值如何来自我的搜索表单。
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_id
和country_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']}'";