2014-07-14 45 views
0

我正在開發一個新的房間預訂系統,到目前爲止所有事情都沒有問題,但現在我遇到了一個問題,我似乎無法找到答案。每天mySql時隙?

房間可以在每週的上午8:30到晚上10點之間預訂。我已經創建了用於創建新客戶和預訂的頁面,現在我只是試圖創建檢查日期和時間是否可用的部分。

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) 
) ; 

感謝

回答

1

如果時間安排是固定的,然後用這個。

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-table佔用的空間。剩下的房間將可用。

+0

的房間都在15分鐘的時隙預訂一空。我可以看到你的解決方案如何工作,但我已經有一個預訂表。我已將這添加到我的問題中供您查看。謝謝 – FallingStar

+0

@FallingStar,希望修改後的答案將解決您的問題。 –

0

我會去3張桌子。

時隙:TIMEID,時隙
房間:roomId,ROOMNAME
預訂:roomId,TIMEID,日期,狀態

更新,以適應您的問題編輯

正如你已經有一個預約表,你幾乎在那裏。

  1. 用timeslot_id替換timeStart和timeEnd。
  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等?),只需在「預訂」表中插入一行即可。

+0

我已經有一張名爲預訂的表格,它包含預訂表單的所有信息。這是否意味着我將不得不修改這張表格:我已將我的預訂表格添加到該問題中。謝謝 – FallingStar

+0

@FallingStar更新回答。 –

+0

你是什麼意思,用timeSlot代替timeStart和End。目前,timeStart和TimeEnd使用javascript timepicker爲用戶選擇他們希望預訂的時間。此外,用戶可以選擇每個預訂超過1個房間。例如他們可以同時預訂房間1和3。再次感謝 – FallingStar

0

注:

  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) 

房若您的結果是在規定的時間爲零,否則不