【问题标题】:How can I update this SELECT query to use an age range如何更新此 SELECT 查询以使用年龄范围
【发布时间】:2017-08-28 21:30:43
【问题描述】:

正在寻找:
我想为这个选择查询添加一些功能。现在,查询根据类型和状态选择用户。 (忽略状态部分,如您所见,它在另一个表上。)我想在此选择器中添加一个年龄范围,如果年龄 > 18 &&

当前查询:

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 - 整数
名字 - 字符
姓氏 -
电子邮件 - varchar
密码 - 字符
生日 - 日期
性别 - 字符
looking_for_gender - char
minimum_age - int
最大年龄 - 整数
maximim_distance - 整数
图片 - varchar
传记 - varchar

【问题讨论】:

    标签: mysql


    【解决方案1】:

    看起来用户的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。

    我们需要决定如何处理相等条件的边缘情况。我们要使用&lt;= 还是&lt;,我们要使用&gt;= 还是&gt;

    【讨论】:

    • 如果年龄存储为日期,这是正确的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-30
    • 2021-10-22
    • 2015-04-14
    • 2015-07-17
    • 1970-01-01
    相关资源
    最近更新 更多