2016-07-08 96 views
2

我有兩個表:酒店預訂SQL查詢不工作

id 
category_id 
name 
description 
image 
price 
arrival_date 
depature_date 
status 

預訂

id 
name 
email 
mobile 
category_id 
room_id 
arrival 
departure 

Q1。我如何檢查客房是否可用?問題二:
Q2。我想說明的房間列表是空的用戶輸入的日期

我使用此查詢,這讓我error #1241 - Operand should contain 1 column(s)

SELECT * FROM room WHERE status = '1' AND id NOT IN 
    (SELECT * FROM booking 
    WHERE arrival='$arrival' 
    OR (arrival BETWEEN '$arrival' AND '$departure')) 

SELECT * FROM room WHERE status = '1' AND id NOT IN 
    (SELECT * FROM booking WHERE arrival='2/08/2013' 
    OR (arrival BETWEEN '2/08/2013' AND '22/08/2013')) 
+0

你的子查詢返回一個where子句的多個結果。這就是爲什麼你會得到這個錯誤。雖然讀你的子查詢,我不知道爲什麼。你正在使用哪個DBMS? – Takarii

+0

我正在使用WAMP MYSQL數據庫 – Harshit

回答

1

爲了您的問題:

Q1。我怎麼能檢查房間是否可用,爲客戶

我想沒有預訂房間可供客戶,所以試試這個:

SELECT * 
FROM room r 
WHERE NOT EXISTS(
    SELECT 'booking' 
    FROM booking b 
    WHERE b.room_id = r.id 
    AND (b.arrival BETWEEN '$arrival' AND '$departure') 
) 

Q2。我想展現古都房間列表是空的用戶輸入的日期

查詢是一樣的,如果它不存在在該區間的房間是空的任何預訂(因此可用於預訂)

3

的主要問題是,在內部查詢,你得到過許多列作爲結果。

嘗試:

SELECT * FROM room WHERE status = '1' AND id NOT IN 
    (SELECT room_id FROM booking 
    WHERE arrival='$arrival' 
    OR (arrival BETWEEN '$arrival' AND '$departure')) 

SELECT * FROM room WHERE status = '1' AND id NOT IN 
    (SELECT room_id FROM booking 
    WHERE arrival='2/08/2013' 
    OR (arrival BETWEEN '2/08/2013' AND '22/08/2013')) 
+0

如何改變列名有什麼區別? – Takarii

+2

我想我不明白德問題。只需用「room_id」替換內部查詢的'*'即可。如果您需要更改列名稱,則必須更改SQL。 –

+0

對不起,我有一個愚蠢的時刻 – Takarii