我有以下記錄的餐桌預訂。
event_type | from_date | to_date
------------- --------------------- ---------------------
party | 2015-09-24 08:00:00 | 2015-09-24 09:30:00
hangout | 2015-09-24 09:00:00 | 2015-09-24 10:00:00
hangout | 2015-09-24 10:00:00 | 2015-09-24 10:30:00
dinner | 2015-09-24 12:00:00 | 2015-09-24 13:30:00
因此,當用戶在前端選擇日期和時間時,我將發送一個帶時間的日期作為上面的示例。
現在在后端,我正在考慮使用用戶選擇的日期和時間查詢所有記錄。
因此,如果選擇的日期和時間存在(查詢回傳大于 0),那么我將顯示預訂不可用,但如果它回傳 0 記錄,則預訂可用。
我怎樣才能做到這一點?
uj5u.com熱心網友回復:
如果前端給出兩個日期和事件型別:
- fe_period_start
- fe_period_end
- fe_event_type
然后查詢以檢查是否沒有重疊時期應該是這樣的
select count(*) from booking
where event_type = fe_event_type
and from_date <= fe_period_end
and to_date >= fe_period_start
在這種情況下,我們發現預訂在 10:00 結束并且我們從 10:00 開始尋找免費的情況也存在沖突。
如果我們接受,一個預訂可以在 10:00 結束,第二個預訂可以在 10:00 開始,那么不平等where肯定很嚴重。
select count(*) from booking
where event_type = fe_event_type
and from_date < fe_period_end
and to_date > fe_period_start
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/476025.html
標籤:PostgreSQL
