当前在NodeJS约会网站的后端,我正在研究过滤器,尤其是年龄过滤器,方法是获取最小和最大年龄。
在我的数据库中,出生日期的格式为:YYYY-MM-DD。如果我将最小年龄(称为[B])设置为20,将最大年龄(称为[A])设置为26,则应该能够使所有人的年龄都处于[26; 20]范围内。 我认为有可能像这样:
exports.getPeopleByAge = (data) => {
return new Promise((resolve, reject) => {
var ageMax = data.limitAgeMax;
var ageMin = data.limitAgeMin;
return mysql.createConnection({
host:'localhost',
user:'root',
password:'pass',
database:'databasename'
})
.then((conn) => {
return conn.query("SELECT * FROM users WHERE YEAR(age) BETWEEN ? AND ? ORDER BY YEAR(age) ASC", [data.limitAgeMax, data.limitAgeMin]);
resolve();
})
}).catch((error) => {
reject(error);
})
}
对于那些想知道我在数据中收到的信息的人:
{ sortby: 'age', limitAgeMin: '18', limitAgeMax: '19', range: '20', tags: [ '"vegan"', '"music"' ], order: 'asc' }
之所以没有完成,是因为我没有找到解决问题的答案。 我愿意接受所有建议。感谢您的宝贵时间。
答案 0 :(得分:0)
您可以使用MySQL function TIMESTAMPDIFF
从用户的出生日期开始计算其年龄,例如:
SELECT u.*
FROM users
WHERE TIMESTAMPDIFF(YEAR, u.birthdate, NOW()) BETWEEN :ageMin AND :ageMax
更好的是,您可以使用DATE_SUB
动态选择要选择的出生日期范围,以选择可读性较低但效率更高的方法:
SELECT u.*
FROM users
WHERE u.birthdate BETWEEN
DATE_SUB(NOW(), INTERVAL :ageMax YEAR)
AND DATE_SUB(NOW(), INTERVAL :ageMin YEAR)