SQL JOIN OPERATION - PullRequest
       15

SQL JOIN OPERATION

0 голосов
/ 14 декабря 2011

У меня три таблицы

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. Во-первых, мне нужно найти hotel_room_types, доступные для конкретного hotel_id сейчас для каждого room_type (этот тип перечисления yes, предположим, что только для обычного типа enum типа yes) проверить, 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'
        ";

Ответы [ 3 ]

1 голос
/ 14 декабря 2011

Это не ответ на вопрос (вы еще не задавали актуальный вопрос), просто предложение.

В таблице "tbl_room_types" вместо того, чтобы иметь разные столбцы для каждого типа комнаты, вы можете иметь один столбец room_type с типом данных tinyint.

  • 1 для нормальных
  • 2 для роскошных
  • 3 для переменного тока и так далее ...

В противном случае вам придется добавить другой столбец, если в будущем будут добавлены новые типы номеров.

Или вы можете определить enum как enum('d','n','ac', 'nac')

с d для делюкса, n для нормального и т. Д. *

0 голосов
/ 12 сентября 2012

INNER JOIN w3school

проверить это ... и практиковаться тоже;)

0 голосов
/ 14 декабря 2011
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;  

Кстати, это довольно ужасный дизайн!Могу ли я иметь нормальные комнаты с кондиционером или номера люкс без кондиционера?Перечисления в room_types, похоже, не имеют смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...