寻找:
我想为这个select查询添加一些功能。现在,查询根据用户类型和状态选择用户。(忽略status部分,您可以看到它位于另一个表上。)我想给这个选择器添加一个年龄范围,如果年龄> 18 && < 27。这两个信息都可以在user表中找到。
当前查询:
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 -焦
last_name -
电子邮件- varchar
密码焦
生日-日期
性别- char
looking_for_gender -焦
minimum_age - int
maximum_age - int
maximim_distance - int
图片- varchar
传记-瓦尔查
发布于 2017-04-03 21:22:43
看起来,用户的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-031999-04-03岁以后生日的用户未满18岁.
在1989-04-03年前过生日的人年龄大于27岁.
我们需要决定如何处理相等条件的边情况。我们是要使用<=还是<,还是要使用>=或>。
https://stackoverflow.com/questions/43194399
复制相似问题