1

我正在为预订日历创建一个 REST API,现在我正试图找出编写查询的最有效方法,该查询以 15 分钟的间隔返回两个日期之间的所有时间戳。如果我提供2013-09-21并且2013-09-22我想得到:

2013-09-21 00:15:00
2013-09-21 00:30:00
2013-09-21 00:45:00
2013-09-21 01:00:00
2013-09-21 01:15:00
2013-09-21 01:30:00
...
2013-09-22 23:15:00
2013-09-22 23:30:00
2013-09-22 23:45:00

然后我会将此查询用作子查询并对其应用一些条件以删除工作时间以外的时间段(不是恒定的)、预订的时间段等。

我看过很多博客文章,其中作者创建了一个“日历表”来存储所有这些时间戳,但这对我来说似乎是一种浪费,因为不需要存储这些数据。

关于如何执行此操作或获取/存储数据的更好方法的任何建议?

4

1 回答 1

0

这是一个生成 95 行的过程,该过程会随着日期变量的增加而递增,然后将带有日期条目的表左连接到已生成日期行的“实心”表中。

select str_to_date('2010-01-01', '%Y-%m-%d') into @ad;

select * from

(select (@ad := date_add(@ad, INTERVAL 15 MINUTE)) as solid_date from wp_posts limit 95) solid
left join
wp_posts
  on solid.solid_date = post_date

我不知道如何在 mysql 中生成任意数量的行,所以我只是从超过 95 行的表中进行选择(24 小时 * 每小时 4 次约会,午夜时少一次)——我的 wordpress 发布表。如果没有更好的方法可以做到这一点(我是 oracle 专家而不是 mysql 专家),没有什么能阻止您制作这样一个表并在其中包含一个带有单个递增整数的单列。也许没有:如何在 MySQL 中制作行生成器?

在您看到 wp_posts 的地方,替换为您的约会表的名称。在您看到日期的地方,替换您的开始日期。

上面的查询会生成一个从所选日期午夜后 15 日开始的日期列表(在我的示例中为 2010-01-01)

WHERE appointments.primary_key_column_here IS NULL如果您只想查找空闲插槽,则可以添加

请注意,您的规范中没有包括午夜。如果您想要第一天的午夜,请在变量 15 分钟前开始日期,并将自己限制为 96 行。如果您想在最后一天午夜,只需将自己限制为 96 行

于 2013-09-30T17:00:56.590 回答