我正在处理一些导入的数据,这些数据存储有关某个“房间”是否在特定日期可用的详细信息。每个房间都有一个单独的入口,可用日期。
| id | date | price |
--------------------------------
| 1 | 2010-08-04 | 45.00 |
用户可以搜索日期范围,搜索需要带回这两个日期之间可用的相关房间。
换句话说,使用sql查询进行搜索:
where date>=2010-08-04 AND date<=2010-08-09
是不够的,因为这会使所有房间在所选日期之间的所有房间都可用,而不是所有相关日期可用的房间。
我正在考虑以某种方式使用临时日期表来交叉引用该范围内的每个日期都有一个条目,但不确定实现此目的的最佳方式。
结束代码平台是PHP,我也在探索数据是否可以在代码中随后处理,但是如果可能的话,我希望保留所有内容。
非常感谢任何提出的建议。
由于
答案 0 :(得分:4)
更新:我的原始答案与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
答案 1 :(得分:3)
如果(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
确保UNIQUE
上有(id, date)
约束,date
存储为DATE
,而不是DATETIME
。