簡體   English   中英

mysql-在所有日期都出現的日期之間進行搜索

[英]mysql - search between dates where all dates appear

我正在處理一些導入的數據,這些數據存儲有關“房間”在特定日期是否可用的詳細信息。 每個房間都有可用日期的單獨條目。

| id  |  date        |  price  |
--------------------------------
|  1  |  2010-08-04  |  45.00  |

用戶可以在一個日期范圍內進行搜索,搜索需要帶回這兩個日期之間可用的相關房間。

換句話說,使用sql查詢進行搜索:

where date>=2010-08-04 AND date<=2010-08-09

不能滿足要求,因為這將帶回所選日期之間在某些時間點可用的所有房間,而不是在所有相關日期都可用的房間。

我正在考慮以某種方式使用臨時日期表來交叉引用該范圍內每個日期都有一個條目,但是不確定實現此目的的最佳方法。

最終的代碼平台是PHP,我也在探索是否可以在代碼中隨后處理數據,但如果可能的話,希望將所有內容都保留在sql中。

提出的任何建議將不勝感激。

謝謝

更新:我的原始答案與Quassnoi的答案相同,但為時已晚1分鍾,所以我決定刪除它,然后做一些不同的事情。 該查詢不假定(id,date)是唯一的。 如果條目不止一個,它將選擇最便宜的條目。 同樣,它也將總成本相加並返回總成本,這可能也很有用。

SELECT id, SUM(price) FROM (
    SELECT id, date, MIN(price) AS price
    FROM Table1
    GROUP BY id, date) AS T1
WHERE `date` BETWEEN '2010-08-05' AND '2010-08-07'
GROUP BY id
HAVING COUNT(*) = DATEDIFF('2010-08-07','2010-08-05') + 1

假設(id, date)組合是唯一的:

SELECT  id
FROM    mytable
WHERE   date BETWEEN '2010-08-04' AND '2010-08-09'
GROUP BY
        id
HAVING  COUNT(*) = DATEDIFF('2010-08-09', '2010-08-04') + 1

確保您對(id, date)有一個UNIQUE約束(id, date)並且該date存儲為DATE ,而不是DATETIME

暫無
暫無

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

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