簡體   English   中英

日期范圍內的匹配項

[英]match entries within date period

我有一個預訂系統; 每個包含條目的預訂[到達日期:2011年1月14日00:30; 出發日期:2011年1月16日00:30]; 我想顯示此預訂期間內出現的數據庫中的所有預訂。

可以說,我有這些預訂:[見下文]前兩個已經在數據庫中; 現在第三個是新條目; 1rd和2nd都在出現3rd預訂的時間。

a: 2010 01 03
d: 2010 01 10

a: 2009 09 10
d: 2010 02 10

a: 2010 01 02
d: 2010 01 05

我如何查詢MySQL來獲取呢?

使用SQL:

選擇*從預訂到達和離開之間的日期

SELECT * FROM hp_reservations WHERE ((`arrival_date` BETWEEN i:arrival_date AND i:departure_date) OR (`departure_date` BETWEEN i:arrival_date AND i:departure_date)) AND `id` != i:id;

因此,您想要介於預訂A和預訂B之間的所有預訂,對嗎?

可以安全地假設您已經知道標記終點的兩個預訂嗎? 如果是這樣,這很簡單(盡管我不得不問一會兒 ),但可能並不明顯。

方案1-已知日期:

$booking_a_arr = 2010-01-03;
$booking_a_dep = 2010-01-10;

$booking_b_arr = 2009-09-10;
$booking_b_dep = 2010-02-10;

$query = "SELECT id, arrival, departure FROM BOOKINGS
          WHERE 
               arrival >= '$booking_a_arr' AND 
               departure <= $booking_b_dep";

方案2-已知ID:

僅使用預訂ID,這需要為每個預訂進行子查詢以獲取日期:

$booking_a_id = "A";
$booking_b_id = "B";

$query = "SELECT id, arrival, departure FROM BOOKINGS
          WHERE 
          arrival >= (SELECT arrival FROM BOOKINGS WHERE id = '$booking_a_id')
          AND departure <= (SELECT departure FROM BOOKINGS WHERE id = '$booking_b_id')";

通過將到達時間設置為大於早先的預訂日期,而將出發時間設置為小於晚些的預訂日期,您基本上會將結果限制在介於兩者之間但仍包含外部預訂的結果。 如果要獲取不重疊但在這兩個事件之間的所有預訂的列表,則可以將邊界設置為兩個事件的內部邊緣而不是外部邊緣,如下所示:

$booking_a_id = "A";
$booking_b_id = "B";

$query = "SELECT id, arrival, departure FROM BOOKINGS
          WHERE 
          arrival >= (SELECT departure FROM BOOKINGS WHERE id = '$booking_a_id')
          AND departure <= (SELECT arrival FROM BOOKINGS WHERE id = '$booking_b_id')";

在最后一種情況下,如果兩個原始預訂本身重疊,則將返回在重疊內安排的所有事件。 但是,如果是這種情況,並且您希望落入該重疊區域,而不僅僅是在該重疊區域內開始和結束,則可以使用:

$query = "SELECT id, arrival, departure FROM BOOKINGS
          WHERE 
          arrival >= (SELECT departure FROM BOOKINGS WHERE id = '$booking_a_id')
          OR departure <= (SELECT arrival FROM BOOKINGS WHERE id = '$booking_b_id')";

在上述所有情況下,將查詢從AND切換為OR都會使您的事件屬於兩個事件,但不受兩個事件的約束,只能是一個或另一個。

暫無
暫無

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

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