Как мне объединить эти четыре таблицы с помощью sqlite? - PullRequest
0 голосов
/ 02 ноября 2011

У меня проблемы с базой данных sqlite.Я пытаюсь написать запрос, который будет генерировать общий счет для определенного гостя (guestID)

GUEST

  • GuestID (первичный ключ, тип: целое число, автоинкремент)
  • FName (тип: текст)
  • LName (тип: текст)

БРОНИРОВАНИЕ

  • Номер бронирования (первичный ключ, тип:Целое число, автоинкремент)
  • CheckIN (тип: DateTime)
  • CheckOUT (тип: DateTime)
  • GuestID (тип: целое число)
  • RoomNumber (тип: Целое число)

ROOM

  • RoomNumber (первичный ключ, тип: Integer)
  • RoomTypeID (тип: Integer)

ROOMTYPE

  • RoomTypeID (первичный ключ, тип: целое число)
  • кровать (тип: текст)
  • Цена (тип: целое число)

Я знаю, что мне придется вычесть Reservation.checkout из Reservation.checkin, чтобы получить количество дней, а затем умножить его на RoomType.price, чтобы получить общий счет.Итак, как мне написать свой sql-запрос, чтобы получить общий счет для определенного гостя (guestid)?Я знаю, что вы можете объединить до трех таблиц, но я не знаю, как объединить эти четыре таблицы.Пожалуйста помоги.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2011

2 способа: 1 на SQL или 1 на уровне приложения 1) sql:

SELECT g.*, ((strftime('%s',r.CheckOUT) - strftime('%s',r.CheckIN)) * rt.Price/24/60/60) AS total
FROM GUEST g, RESERVATION r, ROOM rm, ROOMTYPE rt
WHERE g.GuestID = r.GuestID AND r.RoomNumber = rm.RoomNumber AND
rm.RoomTypeID = rt.RoomTypeID

Вы можете изменить в соответствии со своими потребностями в основном утверждение, чтобы получить столбцы в гостевой таблице и вычислить цену, которую он / она должен заплатить, вычитая даты проверки и регистрации в секундах, и умножая их на цену вниз до секунд .

2) уровень приложения: Вы можете, вероятно, запустить 2 sql операторов, чтобы получить цену конкретного номера для конкретного гостя. Сделайте расчет цены на любом языке, который вы используете php / ruby ​​/ java и т. Д.

0 голосов
/ 02 ноября 2011

Чтобы объединить эти четыре таблицы, достаточно просто сопоставить столбцы, и тогда все встанет на свои места:

select ...
from guest
join reservation on guest.guestid = reservation.guestid
join room on reservation.roomnumber = room.roomnumber
join roomtype on room.roomtypeid = roomtype.roomtypeid
where guest.guestid = ?
  ...

Если вам не нужно имя гостя, вам нужно присоединиться только к трем столам:

select ...
from reservation
join room on reservation.roomnumber = room.roomnumber
join roomtype on room.roomtypeid = roomtype.roomtypeid
where reservation.guestid = ?
  ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...