簡體   English   中英

每天的mySql時隙?

[英]mySql timeslots for each day?

我正在開發一個新的房間預訂系統,到目前為止一切都還不錯,但現在我遇到了一個問題,我似乎找不到答案。

您可以在每周的每天8:30 am至10:00 pm之間預訂房間。 我已經創建了用於創建新客戶和預訂的頁面,現在我只是嘗試創建一個用於檢查日期和時間是否可用的部件。

    timeId    timeSlot    room1      room2      room3
    1         08:30:00    Available  Available  Available
    2         09:45:00    Available  Available  Available
    3         09:00:00    Available  Available  Available
    4         09:15:00    Available  Available  Available
    5         09:30:00    Available  Available  Available

當客人把它改變AvailableRequested換房間,一旦這是由一名工作人員證實是會又變成Booked

所以我的問題是,如何使它在不同的日子工作? 我將需要每天查看上表。

提前致謝

更多信息:

這是我預訂的桌子:

DROP TABLE IF EXISTS booking;
CREATE TABLE IF NOT EXISTS booking (
    customerno int(8) NOT NULL,
    bookingno int(8) NOT NULL AUTO_INCREMENT,
    youthCafe varchar(3) DEFAULT NULL,
    inkwellMain varchar(3) DEFAULT NULL,
    inkwellSmall varchar(3) DEFAULT NULL,
    kitchen varchar(3) DEFAULT NULL,
    outsideCatering varchar(3) DEFAULT NULL,
    bookingDateStart DATE NOT NULL,
    timeStart  time NOT NULL,
    timeEnd  time NOT NULL,
    recurFreq varchar(15) DEFAULT "N/A",
    attending int(3) DEFAULT NULL,
    layout varchar(15) DEFAULT NULL,
    equipment varchar(20) DEFAULT NULL,
    catering varchar(3) DEFAULT NULL, 
    cateringOptions varchar(128) DEFAULT NULL,
    message varchar(128) DEFAULT NULL,
    PRIMARY KEY (bookingno),
    FOREIGN KEY (customerno) REFERENCES customers(customerno)
) ;

謝謝

如果時間表固定,則使用此時間表。

Table-1
TimeID, Time

Table-2
RoomID, ROom

Table-3
ID, Date, TimeID, RoomID

如果時間表不固定

Table-1
TimeID, StartDate, EndDate, ArrivedTime, DepartureTime

Table-2
RoomID, Room

Table-3
ID, TImeID, RoomID

希望這能解決您的問題

booking-table
customerno, bookingno, bookingDateStart, timeStart, timeEnd

room-table
RoomID, Room

Relation-table
RelationID, bookingno, RoomID

假設bookingno是唯一的。 您可以通過使用(日期)的bookingno加入(INNER JOIN) booking-tablerelation-tablebookingno 剩下的房間將可用。

我要三張桌子。

時隙:timeId,timeSlot
rooms:roomId,roomName
預訂:roomId,timeId,日期,狀態

更新以適應您的問題

由於您已經有了預訂表,因此您已經准備好了很多。

  1. 將timeStart和timeEnd替換為timeslot_id。
  2. 添加列room_id。

我不確定您如何使用“ bookingDateStart”,但理想情況下應該只是“ bookingDate”。

您的“預訂”表似乎也在嘗試容納經常性預訂。 將其移至單獨的表-booking_recurring。

DROP TABLE IF EXISTS booking_recurring;
CREATE TABLE IF NOT EXISTS booking_recurring (
    recurring_id int(8) NOT NULL AUTO_INCREMENT,
    start_date DATE NOT NULL,
    end_date DATE NOT NULL,
    room_id NOT NULL,
    customer_id NOT NULL,
    timeslot_id NOT NULL
PRIMARY KEY (recurring_id),
FOREIGN KEY (customerno) REFERENCES customers(customerno)
FOREIGN KEY (room_id) REFERENCES rooms(room_id)
FOREIGN KEY (timeslot_id) REFERENCES timeslots(timeslot_id)
);

每當進行定期約會時(cronjob等?),只需在“ booking”表中插入一行即可。

筆記:

  1. 您的預訂表不包含任何有關預訂房間的信息。

  2. 您需要一個房間表,至少ID =>房間說明

  3. 定期預訂需要單獨處理,並作為單獨事件注入到預訂表中。

要查找房間是否可用:

SELECT COUNT(*) FROM bookings b 
JOIN rooms r ON b.roomId = r.id
WHERE b.bookingDateStart=$bookDate AND r.id=$roomId
AND ($time > b.startTime AND $time < b.endTime)

如果您的結果在指定時間內為零,則房間可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM