寻找:
我想为这个选择查询添加一些功能。现在,查询根据类型和状态选择用户。 (忽略状态部分,它在另一个表格中,你可以看到。)我想为这个选择器添加一个年龄范围,如果年龄> 18&& < 27.这两个信息都可以在用户表中找到。
当前查询:
SELECT
u.*
FROM
User u
LEFT JOIN
User_Status us ON u.id = User_ID1 AND us.User_ID2 = 4
WHERE
gender = 'f'
AND (us.Status != 'FRIENDS'
OR us.status IS NULL)
通缉结果:
添加年龄范围选择器的相同查询。
用户表:
ID - Int
first_name - char
last_name -
电子邮件 - varchar
密码 - char
生日 - 日期
性别 - char
looking_for_gender - char
minimum_age - int
maximum_age - int
maximim_distance - int
图片 - varchar
传记 - varchar
答案 0 :(得分:2)
看起来用户的age
将来自birthday
和当前日期。
相反,给定"年龄范围",我们可以确定birthday
的下限和上限。
例如,年龄为25岁的用户将拥有以下范围内的生日:
WHERE u.birthday >= DATE(NOW()) - INTERVAL 25 YEAR - INTERVAL 1 YEAR
AND u.birthday < DATE(NOW()) - INTERVAL 25 YEAR
年龄在18到27之间的用户将拥有以下范围内的生日:
WHERE u.birthday >= DATE(NOW()) - INTERVAL 27 YEAR - INTERVAL 1 YEAR
AND u.birthday < DATE(NOW()) - INTERVAL 18 YEAR
我们可以在SELECT语句中测试我们的表达式
SELECT DATE(NOW()) - INTERVAL 27 YEAR - INTERVAL 1 YEAR AS lower_bound
, DATE(NOW()) - INTERVAL 18 YEAR AS upper_bound
返回:
lower_bound upper_bound
----------- -----------
1989-04-03 1999-04-03
1999-04-03之后生日的用户 18岁以下。
在 1989-04-03之前生日的用户旧而不是27岁。
我们需要决定如何处理相等条件的边缘情况。我们是否要使用<=
或<
,我们是否要使用>=
或>
。