2016-07-08 62 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