需要一个 MySQL 查询来获取未在表中注册的日期
Posted
技术标签:
【中文标题】需要一个 MySQL 查询来获取未在表中注册的日期【英文标题】:Need a MySQL query to obtain dates not registered in a table 【发布时间】:2012-09-25 15:56:59 【问题描述】:我对特定功能有一点问题。我有一张房间预订表。
表:预订
room (BIGINT), date (DATE)
4, 2012-09-25
4, 2012-09-27
4, 2012-09-30
我需要获取日期范围内 id = 4 的房间可用的日期。例如,如果我想要房间在 2012 年 9 月 25 日到 2012 年 10 月 1 日(含)之间可用的日期,我必须获得下一个结果:
date (DATE)
2012-09-26
2012-09-28
2012-09-29
2012-10-01
任何帮助将不胜感激。提前致谢。
【问题讨论】:
目前没有一个查询可以做到这一点。看看这个:***.com/questions/510012/… mysql和代码的结合可以解决你的问题,或者你可以编写一个存储过程来循环指定时间间隔的日期范围并返回所需的结果。 【参考方案1】:如果您将日期表添加到数据库,则可以轻松处理此类查询。用大量日期填充它(并在需要时添加),然后对其进行右外连接以查找缺失的日期。
如果您不能或不想添加额外的表格,您可以将日期转换为整数字段(表示自 1970 年 1 月 1 日以来的天数):
SELECT room, UNIX_TIMESTAMP(`date`)/86400 FROM reservations
从那里,您可以使用this question 或其他地方的技术来查找该序列中的空白。
【讨论】:
【参考方案2】:正如@steven-cheng 所说,我不得不使用 mysql 和代码的组合,因为创建临时表太麻烦了。使用代码获取可用日期更快。
【讨论】:
以上是关于需要一个 MySQL 查询来获取未在表中注册的日期的主要内容,如果未能解决你的问题,请参考以下文章