簡體   English   中英

mysql查詢室可用性

[英]mysql query room availability

看了一下這里的其他一些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個酒店,主查詢會給我錯誤:

子查詢返回多行

我想,因為我使用'IN'就可以了。 有什么建議么? 此外,當我開始實現多個子查詢時,解決方案也需要使用它。

我知道我在做房間的方式並不盡可能優雅,但是我不知道如何達到我需要的結果,因為預訂通常是批量預訂(例如預訂的多個房間)一段時間,如果在提供的日期內沒有一種房型,則需要從搜索結果中刪除整個酒店。

IF(($q1) > 0, 1, 0)

這是返回錯誤的部分。

此外,你有它的方式, $q1被評估兩次,這可能不是你想要的。

如果我理解你正在嘗試做什么,那么你應該能夠把這部分留下來。 如果$q1沒有返回任何行,則IN表達式根本不匹配任何內容。

還應該注意,帶有子查詢的IN在MySQL中效率相當低; 加入時運行速度會快得多:

SELECT `c_title` FROM `c_content` JOIN ($q1) `a` ON `c_content`.`c_id`=`a`.`bd_h_id`

錯誤消息是指查詢結尾處的IF(($q1) > 0, 1, 0)子句。 如果子查詢返回多行,則無法將子查詢與>進行比較。

暫無
暫無

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

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