首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有效地从MySQL中查找数据范围

问有效地从MySQL中查找数据范围
EN

Stack Overflow用户
提问于 2017-12-23 13:05:01
回答 1查看 138关注 0票数 0

下面是我的DiscountPeriod表的结构:

代码语言:javascript
复制
id
room_id
date_from
date_last
discount

假设我们有折扣,从01 December 2017开始,以10 December 2017结尾。

我在找日期范围看看有没有折扣。因此,日期范围可能完全或部分在某些折扣期内。3个示例日期-搜索范围:

  • 从12月2日至12月10日(完全在一个折扣期内)
  • 11月20日至12月4日(部分在内部)
  • 12月5日至12月15日(部分在内部)

以上所有三个例子的预期都是以01 December 2017开头,以10 December 2017结尾的折扣。

目前,我的查询只从数据库中获取完全在精确时间段内的结果。

看起来是这样的:

代码语言:javascript
复制
SELECT * FROM `DiscountPeriod` WHERE (`room_id`=1517) AND (`date_last` >= '2017-12-12') AND (`date_from` <= '2017-12-20');

问题是,为了在MySQL数据库表中进行有效的搜索,如何将所有3种可能的搜索用例整合到一个查询中?

预期结果是

以下所有范围:12月2日至12月10日、11月20日至12月4日、12月5日至12月15日应返回12月1日至10日折扣。

EN

回答 1

Stack Overflow用户

发布于 2017-12-23 13:23:49

这看起来是一个重叠的范围问题。如果要返回与2017年12月1日至10日重叠的所有折扣,请尝试以下查询:

代码语言:javascript
复制
SELECT *
FROM DiscountPeriod
WHERE
    room_id = 1517 AND
    '2017-12-01' <= date_last AND '2017-12-10' >= date_from;

下面是一个使用您的测试数据的演示。您建议的所有三个折扣范围都显示在结果集中。但正如我们所预料的那样,2017年12月1日至10日以外的距离是完全没有的。

​

Demo

​

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

https://stackoverflow.com/questions/47952737

复制
相关文章

相似问题

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