簡體   English   中英

驗證mysql行是否與另一行沖突

[英]Verify if mysql row has conflict with another one

我正在工作所在的學校建立資源預訂系統。資源僅保留40分鍾(這是課堂上的持續時間)。

資源分為4類:

1-學前班

2-初級

3-高中,一樓

4-高中,二樓


時間表分為不同的時間范圍:

1-托兒所

2-前照

3種

4年級(1年級-3年級)

5年級(4年級-6年級)

6-高中(7年級-9年級)

7-高中(10年級及以上)

有時,有一種情況,一年級至三年級的學生在休息,而四年級至六年級的學生在課堂。 休息持續15分鍾,上課40分鍾。 有時,時間表存在沖突,如果允許用戶保留資源,則該資源將被另一個用戶至少再使用10分鍾,這在preschoolelementaryhigh school均會發生。

我的數據庫保留表結構如下:

預訂表

我認為有兩個字段可以幫助我確定預訂是否會造成沖突: RESERVATIONDUEDATERESERVATIONEXPIREDATE都是datetime並且具有我需要的信息。 我無法想象如何查詢以驗證是否存在沖突。

到目前為止,我有一個查詢函數,如下所示:

     SELECT T1.SCHEDULE_START, T1.SCHEDULE_END
FROM reservation T4
JOIN schedule_intermediate T1 ON T4.SCHEDULEID_GENERATED = T1.SCHEDULEID_GENERATED
JOIN schedule_type T2 ON T1.SCHEDULE_TYPE_ID = T2.SCHEDULE_TYPE_ID
JOIN schedule T3 ON T1.SCHEDULEID = T3.SCHEDULEID
WHERE (
SELECT COUNT( * ) 
FROM reservation R
INNER JOIN schedule_intermediate SI ON R.SCHEDULEID_GENERATED = SI.SCHEDULEID_GENERATED
WHERE R.RESOURCEID =456
AND SI.SCHEDULE_TYPE_ID =4
AND R.RESERVATIONDUEDATE !=  '2014-08-06 07:35:00'
AND R.RESERVATIONEXPIREDATE !=  '2014-08-06 08:35:00'
AND(( SI.SCHEDULE_START < T1.SCHEDULE_START AND SI.SCHEDULE_END > T1.SCHEDULE_START ) 
    OR ( SI.SCHEDULE_START < T1.SCHEDULE_END AND SI.SCHEDULE_END > T1.SCHEDULE_END ))
) = 0

該查詢旨在僅選擇RESOURCEIDSCHEDULE_TYPE_ID ,“ SCHEDULE_START”和“ SCHEDULE_END”與查詢中提供的信息不同的可用SCHEDULE_TYPE_ID

在這一點上,我什至不確定查詢的結構是否正確,因為此查詢的結果是:

在此處輸入圖片說明

我真正想要的是這些屬性與提供的屬性不同的時間段。

我正在努力弄清您的需求。 試試這個...進行與您的操作類似的搜索...

WHERE R.RESOURCEID =456
AND SI.SCHEDULE_TYPE_ID =4
AND R.RESERVATIONDUEDATE >=  '2014-08-06 07:35:00'
AND R.RESERVATIONEXPIREDATE <=  '2014-08-06 08:35:00'

如果查詢返回0行,則不會發生沖突。

目前,您的查詢返回該行,因為Schedule_Start是07:50,它不等於07:35:00?

此外,這是否適用於重復會話,如果是這樣,那么您如何以時間戳格式在數據庫中管理它?

暫無
暫無

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

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