gpt4 book ai didi

mysql - SQL - 查询 session 室

转载 作者:太空宇宙 更新时间:2023-11-03 10:54:14 27 4
gpt4 key购买 nike

我需要帮助来创建查询以在所选时间段内已有 session 时返回。

我有表 rep_reuniao具有以下设计

  ID           --> int
ROOM --> int
DATE_BEGIN --> DATETIME
DATE_END --> DATETIME

现在在表 rep_reuniao 中插入一行看起来像这样

 ID            --> 1
ROOM --> 2
DATE_BEGIN --> 2014-02-21 17:00:00
DATE_END --> 2014-02-21 18:00:00

我将创建一个 Jquery Ajax 脚本来返回 truefalse基于所选日期时间的 JSON 响应。

所以查询将有 ROOM , DATE_BEGIN采用这种格式 2014-02-21 17:00DATE_END同样的格式 2014-02-21 18:00

我检查了其他回复,但其中大部分是显示可用房间的查询。在我的设计中,一个房间总是可用的,除非在 table 上有一个寄存器。

Example 1

房间 1已从 2014-02-21 17:00:00 开始使用至 2014-02-21 18:00:00

如果用户在以下位置选择房间,则需要创建一个查询以返回一个值(任何值):

BEGIN = 2012-02-21 16:30:00 
END = 2012-02-21 17:30:00

看到了吗?表中使用的房间从 17:00 开始,所以如果用户选择的开始时间相同,今天我的查询很容易返回一个值。但是用户选择的结束日期在已经使用的时间之间。

嗯,查看开始日期和结束日期,用户选择的时间无法使用。我现在没有想法,任何人都可以帮助我吗?

您需要检查一个日期范围是否与另一个日期范围重叠。

New Date Range =               |-----------|
Test1 = |=====|
Test2 = |=====|
Test3 = |=====|
Test4 = |=====|
Test5 = |=====|
Test6 = |=================|

只有 Test1 和 Test5 不重叠。

抱歉,如果有任何英文错误。如果有人能够修复,我将不胜感激。

最佳答案

关于重叠时间范围的正确逻辑是,当这两个条件都为真时,两个时间范围重叠:

  • 第一个在其他结束之前开始
  • 一个开始后一个结束

在SQL中,这些很容易表达:

SELECT r.* 
FROM rep_reuniao r
WHERE @UserBegin <= r.DATE_END AND
@UserEnd >= r.DATE_BEGIN;

请注意,当在指定时间范围内举行多个 session 时,这可能会返回多行。

如果您想要 true/false 或 0/1,则使用聚合和 case:

SELECT (case when count(*) = 0 then 'false' else 'true' end) as HasOverlappingRooms
FROM rep_reuniao r
WHERE @UserBegin <= r.DATE_END AND
@UserEnd >= r.DATE_BEGIN;

关于mysql - SQL - 查询 session 室,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21977126/

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