2016-07-08 7 views
2

が、私は2つのテーブルを持って働いていません。どの部屋を利用できるかどうかを確認する方法は?
Q2。主な問題は、内側のクエリに、あなたも取得している、ということである私は、このクエリを使用していたユーザの入力日付ホテル予約SQLクエリは

ための空で部屋のリストを表示したい、それが私に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

ユーザ入力日付の空でのthous部屋のリストを表示したいですあなたのサブクエリは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

関連する問題