sql - 如何找到数据库时间重叠

标签 sql database

我正在创建数据库以检查 Room 在输入的时间内是否可用。我在编写查询时遇到问题。如果与输入的时间重叠,查询必须检查 Schedule 表和 Reservation 表。如果有重叠,查询最好返回 TRUE,如果没有重叠,则返回 FALSE。这是好的数据库结构吗(这样我就可以只专注于查询)或者我需要重组数据库?请帮助我。

我的数据库:

CREATE TABLE "Room" (
    "ID" VARCHAR PRIMARY KEY  NOT NULL  UNIQUE,
    "Name" VARCHAR NOT NULL,
    "Location" VARCHAR NOT NULL,
    "Capacity" INTEGER
)

CREATE TABLE "Schedule" (
    "ID" VARCHAR,
    "Day" VARCHAR,
    "start_time" DATETIME,
    "end_time" DATETIME
)

CREATE TABLE "Reservation" (
    "ID" VARCHAR PRIMARY KEY  NOT NULL,
    "Day" VARCHAR NOT NULL,
    " start_time " DATETIME NOT NULL,
    " end_time " DATETIME NOT NULL,
    "User" VARCHAR
)

最佳答案

为每一列选择合适的数据类型,“ID”列最好是INT。您需要“日”列做什么?无论如何,您的“开始时间”和“结束时间”列中都有一个日期。

此外,我没有看到“房间”表与其他两个表之间的联系。

CREATE TABLE "Room" (
    "ID" INT PRIMARY KEY  NOT NULL  UNIQUE,
    "Name" VARCHAR NOT NULL,
    "Location" VARCHAR NOT NULL,
    "Capacity" INT
)

CREATE TABLE "Schedule" (
    ID INT,
    start_time DATETIME,
    end_time DATETIME,
    room_id INT
)

CREATE TABLE "Reservation" (
    "ID" INT PRIMARY KEY  NOT NULL,
    "start_time " DATETIME NOT NULL,
    "end_time " DATETIME NOT NULL,
    "User" VARCHAR /*you might want to make this an INT, too, and put the users in an extra table*/
    , room_id INT
)

我不知道您使用的是什么 DBMS,所以我也不知道正确的语法,但您最好在 Schedule 和 Reservation 表中的 room_id 列上放置一个外键,引用 Room 表中的 id 列。

然后你这样做:

SELECT
*
FROM
Room 
LEFT JOIN Schedule ON Room.id = Schedule.room_id
LEFT JOIN Reservation ON Room.id = Reservation.room_id
WHERE 
(
(Schedule.start_time <= $yourStartTime AND Schedule.end_time > $yourEndTime)
OR
(Reservation.start_time <= $yourStartTime AND Reservation.end_time > $yourEndTime)
) 
AND Room.id = $yourRoomId

此查询在房间已满时返回一些内容,而在房间空闲时返回空值/NULL。

关于sql - 如何找到数据库时间重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10982053/

相关文章:

SQL设置浮点精度

SQL SELECT 名称类似于 $name 但不完全相同的名称两次

mysql - 优化 SQL-Query 的几个 JOIN

sql - 如何创建pl sql函数以检查数据库中是否存在数据

php - 有效地对大mysql表进行排序

sql - Oracle SQL 中的时间戳到日期

php - 更新mysql记录

MySQL 关系和连接

php - SQL - 返回用户拥有的书籍

database - 如何在文件系统中存储图像