[英]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分鍾,這在preschool
, elementary
和high school
均會發生。
我的數據庫保留表結構如下:
我認為有兩個字段可以幫助我確定預訂是否會造成沖突: RESERVATIONDUEDATE
和RESERVATIONEXPIREDATE
都是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
該查詢旨在僅選擇RESOURCEID
, SCHEDULE_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.