1

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

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

所以。我能知道有没有办法使用 MySqlSELECT查询来做到这一点。希望有人可以帮助我。谢谢你。

4

1 回答 1

0

TIMESTAMPDIFF会给你两个日期的差异,所以基本上如果你通过出生日期和当前日期,它会让你变老。

注意:确保清理您的输入。

$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']}'";
于 2015-06-06T13:56:10.000 回答