到目前为止,我已经查看了这里的一些其他 mysql 可用性查询问题,但我的工作方式与其他的略有不同。
基本上我有一个日期表,每个日期都是一行。每行都包含说明费用、房间类型以及您必须在该日期预订多少天的字段。因此,如果一个酒店有 1 种房型,它将有 365 行,如果它有 5 种房型,它将有 1825 行
bd_id int(10) NO PRI NULL auto_increment
bd_room_type varchar(32)
bd_date date NO
bd_price decimal(8,2)
bd_h_id int(8) NO /* Hotel id */
bd_available tinyint(1) /* number of days you must book to include this date */
我得到了起止日期,并填补了两者之间的空白,这样我就有了预订的所有日期。
$q1 = "SELECT bd_h_id
FROM booking_dates
WHERE bd_date IN ('2011-02-16','2011-02-17','2011-02-18')
AND bd_available <= '3'
AND bd_room_type = 'single'
AND bd_price > '0'
GROUP BY bd_h_id
HAVING count(*) = '3'";
因此,如果计数与持续时间相同,则表示已满足所有依赖项,并且可以在搜索中显示结果。
然后我将该查询作为变量传递给另一个查询,该查询提取酒店信息,检查子查询是否返回任何内容。
$q = "SELECT c_title FROM c_content WHERE c_id IN ($q1) AND IF(($q1) > 0, 1, 0)";
这很好,但是如果子查询返回超过 1 家酒店,主查询会给我错误:
子查询返回超过 1 行
我想因为我用了“IN”就可以了。有什么建议么?此外,当我着手实现多个子查询时,解决方案也需要使用它。
我知道我做房间的方式并不像它应该的那样优雅,但是我不确定如何才能达到我需要的结果,因为预订通常是批量预订(例如,在一次,如果在提供的日期内没有一种房间类型,则需要从搜索结果中删除整个酒店)。