2013-04-23 108 views
0

我有一个酒店系统thesw 2表MySQL查询(加入)

预约表

reservation_id pk 
Start_Date 
End_Date 
Customers_Customer_id fk 
Rooms_Room_id fk 

室表

Room_id pk 
type 
floor 
price 

我有这个query检索可用房间

$sql="SELECT Room_id,type,room_floor,price FROM rooms 
LEFT JOIN reservation 
ON rooms.Room_id = reservation.Rooms_Room_id 
where rooms.type='$_POST[type]' 
and Start_Date !='$_POST[from]' 
and End_Date !='$_POST[to]'" 

所以结果是好的,但它只是给我的预约表 房间我想在预约表,但不是在搜索日期 房间加上在房间表中的其他房间

+0

没有太多的一个mysql的家伙,但是不会使用'$ _POST'!首先消毒!阅读这里http://stackoverflow.com/questions/3645131/what-is-a-good-method-to-sanitize-the-whole-post-array-in-php AND here http://stackoverflow.com/questions/4861053/php-sanitize-values-of-a-array/ – Grmn 2013-04-23 05:06:14

+0

认为你知道该网站是安全湖它只是一个项目,我的拼贴它不会在网上公布 – user2309797 2013-04-23 05:26:50

回答

0

当您添加在where子句中它像内部联接左外连接表的条件,这应该解决您的当前查询,

$sql="SELECT Room_id,type,room_floor,price FROM rooms 
LEFT JOIN reservation 
ON rooms.Room_id = reservation.Rooms_Room_id 
and Start_Date !='$_POST[from]' 
and End_Date !='$_POST[to]' 
where rooms.type='$_POST[type]'" 

但是你不会返回正确的结果,您可能需要您的查询更改为此

$sql="SELECT Room_id,type,room_floor,price FROM rooms 
WHERE room_id not in 
(
    --find all rooms that are unavailable 
    SELECT Room_id FROM rooms 
    INNER JOIN reservation ON rooms.Room_id = reservation.Rooms_Room_id 
    WHERE NOT ('$_POST[to]' < start_date or '$_POST[from]' > end_date) 
    AND rooms.type='$_POST[type]' 
) AND type='$_POST[type]'" 
+0

感谢人改变了地方后像一个魅力的房间类型 – user2309797 2013-04-23 05:24:46