如何更新此SELECT查询以使用年龄范围

时间:2017-04-03 21:14:36

标签: mysql

寻找:
我想为这个选择查询添加一些功能。现在,查询根据类型和状态选择用户。 (忽略状态部分,它在另一个表格中,你可以看到。)我想为这个选择器添加一个年龄范围,如果年龄> 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

1 个答案:

答案 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岁。

我们需要决定如何处理相等条件的边缘情况。我们是否要使用<=<,我们是否要使用>=>