2011-12-14 62 views
0

我有三個表SQL JOIN操作

CREATE TABLE IF NOT EXISTS `tbl_hotelinfo` (
    `hotel_id` int(11) NOT NULL AUTO_INCREMENT, 
    `hotel_name` varchar(20) NOT NULL, 
    `hotel_normal_room` int(3) NOT NULL, 
    `hotel_delux_room` int(3) NOT NULL, 
    `hotel_nonac_room` int(3) NOT NULL, 
    `hotel_ac_room` int(3) NOT NULL, 
    `hotel_owner_email` varchar(20) NOT NULL, 
    `hotel_owner_index` int(11) NOT NULL, 
    `hotel_state` varchar(11) NOT NULL, 
    `hotel_district` varchar(11) NOT NULL, 
    `hotel_phno` int(13) NOT NULL, 
    `hotel_location` varchar(20) NOT NULL, 
    PRIMARY KEY (`hotel_id`) 
) 
CREATE TABLE IF NOT EXISTS `tbl_hotelbooking` (
    `hotel_id` int(11) NOT NULL, 
    `normal_room_booked` int(3) NOT NULL DEFAULT '0', 
    `delux_room_booked` int(3) NOT NULL DEFAULT '0', 
    `nonac_room_booked` int(3) NOT NULL DEFAULT '0', 
    `ac_room_booked` int(3) NOT NULL DEFAULT '0' 
) 
CREATE TABLE IF NOT EXISTS `tbl_room_types` (
    `hotel_id` int(11) NOT NULL, 
    `hotel_normal_room` enum('yes','no') NOT NULL DEFAULT 'no', 
    `hotel_delux_room` enum('yes','no') NOT NULL DEFAULT 'no', 
    `hotel_nonac_room` enum('yes','no') NOT NULL DEFAULT 'no', 
    `hotel_ac_room` enum('yes','no') NOT NULL DEFAULT 'no', 
    `normal_fair` int(11) NOT NULL, 
    `delux_fair` int(11) NOT NULL, 
    `non_ac_fair` int(11) NOT NULL, 
    `ac_fair` int(11) NOT NULL 
) 

現在我需要參加這三個表中查找HOTEL_NAME,hotel_location對於那些酒店,其房間可供 假設我們有HOTEL_ID可用的。首先我要找到每個room_type可現在特別HOTEL_ID hotel_room_types(其中枚舉類型是假設只針對正常室溫枚舉類型是肯定的),檢查自己是否tbl_hotelinfo.hotel_normal_room> tbl_hotelbooking.normal_room_booked 試圖

$q="SELECT total.hotel_name ,total.hotel_phno 
     FROM tbl_hotelbooking AS book , 
     tbl_hotelinfo AS total, 
     tbl_room_types AS rtype 
     WHERE 
     SELECT * from tbl_room_types 
     rtype.hotel_id='$hotel_id' 
     "; 
+0

什麼是這裏的實際問題? – codeling 2011-12-14 07:13:59

回答

0
select h.hotel_name, 
     h.hotel_location, 
from tbl_hotel_info h 
join tbl_hotelbooking b on h.hotel_id = b.hotel_id 
where h.hotel_normal_room < b.normal_room_booked 
    or h.delux_room < b.delux_room_booked 
    or h.ac_room < b.ac_room_booked 
    or h.nonac_room < b.nonac_room_booked; 

順便說一句,這是一個很可怕的設計!我可以在沒有空調的AC或豪華間使用普通房間嗎? room_types中的枚舉似乎沒有用處。

1

這不是對問題的回答(你現在還沒有問過實際問題),只是一個建議。

在表「tbl_room_types」中,不是每個房間類型都有不同的列,您可以使用單列room_type,數據類型爲tinyint

  • 1的正常
  • 2豪華
  • 3的交流等等...

否則,你就必須添加不同的列,如果一些新的客房類型,獲取加未來。

,也可以定義枚舉爲enum('d','n','ac', 'nac')

與d的豪華,正正常,等等...