gpt4 book ai didi

mysql - 日期范围搜索

转载 作者:行者123 更新时间:2023-11-30 22:43:58 24 4
gpt4 key购买 nike

Quassnoi 和其他人发布了一些相关的解决方案,但它们并不适用于这种特殊情况。

在一个大约有200万条记录的MySql表中,(Id int、StartDate 日期、EndDate 日期)和一些信息。我需要隔离触及特定日期范围(从 - 到)的记录示例:哪些记录触及十一月

SELECT id 
FROM Records
WHERE StartDate<="2015-11-30"
AND EndDate>="2015-11-01"

开始日期和结束日期之间的差异通常很小,但也可能很大(超过一年)。这就是为什么 Quassnoi 之前的回答不起作用的原因。我无法让它在合适的时间运行。

任何帮助/建议将不胜感激。

最佳答案

这是一个难题。没有 INDEX 会很好地工作。

但是,让我草拟一个涉及额外表和一些额外处理的解决方法。

  1. 选择一个时间段,例如“月份”(与您的示例一样)。
  2. 构建另一个具有 PRIMARY KEY(month, id) 的表,其中 id 是预订的 ID。 (我认为不需要任何其他专栏。)
  3. 对于每条记录(在您当前的表中),使用预订 id 及其部分或全部跨越的月份在新表中填充一行或多行。
  4. “哪些预订在 11 月使用房间”应该非常简单明了。
  5. “使用 4 月 28 日至 5 月 4 日期间房间的预订涉及查找 4 月和 5 月的 ID,然后检查实际开始/结束日期以过滤掉不适用的 ID。

如果使用'week'(而不是'month'),新表中的行会更多,但选择性更好——从长远来看,很难说哪个更好。

因此,查询变成如下所示。 (我假设 $start_date 到 $end_date 是日期并且包含。)

SELECT ...
FROM new_table AS n
JOIN bookings AS b USING(id)
WHERE start_date <= n.month + INTERVAL 1 MONTH
AND n.month <= $end_date
AND ... same stuff for b. ...

关于mysql - 日期范围搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30201275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com