首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更新此选择查询以使用年龄范围

如何更新此选择查询以使用年龄范围
EN

Stack Overflow用户
提问于 2017-04-03 21:14:35
回答 1查看 53关注 0票数 0

寻找:

我想为这个select查询添加一些功能。现在,查询根据用户类型和状态选择用户。(忽略status部分,您可以看到它位于另一个表上。)我想给这个选择器添加一个年龄范围,如果年龄> 18 && < 27。这两个信息都可以在user表中找到。

当前查询:

代码语言:javascript
复制
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

传记-瓦尔查

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-03 21:22:43

看起来,用户的age将从birthday和当前日期派生出来。

相反,给定一个“年龄范围”,我们可以确定birthday的下界和上界。

例如,25岁的用户生日将在以下范围内:

代码语言:javascript
复制
  WHERE u.birthday >= DATE(NOW()) - INTERVAL 25 YEAR - INTERVAL 1 YEAR 
    AND u.birthday <  DATE(NOW()) - INTERVAL 25 YEAR

年龄在18至27岁之间的用户将在此范围内过生日:

代码语言:javascript
复制
  WHERE u.birthday >= DATE(NOW()) - INTERVAL 27 YEAR - INTERVAL 1 YEAR 
    AND u.birthday <  DATE(NOW()) - INTERVAL 18 YEAR

我们可以在SELECT语句中测试表达式

代码语言:javascript
复制
 SELECT DATE(NOW()) - INTERVAL 27 YEAR - INTERVAL 1 YEAR AS lower_bound 
      , DATE(NOW()) - INTERVAL 18 YEAR                   AS upper_bound 

返回:

代码语言:javascript
复制
 lower_bound  upper_bound
 -----------  -----------
 1989-04-03   1999-04-03

1999-04-03岁以后生日的用户未满18岁.

在1989-04-03年前过生日的人年龄大于27岁.

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43194399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档