2011-11-02 60 views
0

我遇到了我的sqlite數據庫問題。我試着寫,這將產生一個特定的客人,因此總費用的查詢(guestID)如何使用sqlite加入這四個表格

GUEST

  • GuestID(主鍵,類型:整數,自動增量)
  • FName參數(類型:文本)
  • LName的(類型:文本)

預訂

  • 預訂號碼(主鍵,類型:整數,自動增量)
  • 簽入(類型:DATETIME)
  • 結帳(類型:DATETIME)
  • GuestID(類型:整數)
  • RoomNumber(類型:整數)

ROOM

  • RoomNumber(主鍵,類型:整數)
  • RoomTypeID(類型:整數)

ROOMTYPE

  • RoomTypeID(主鍵,類型:整數)
  • 牀(類型:文本)
  • 價格(類型:整數)

我知道我必須從Reservation.checkin中減去Reservation.checkout以獲得天數,然後再乘以RoomType.price,以便會給我一個總賬單。那麼,如何編寫我的sql查詢來給我一個特定客人(guestid)的總賬單?我知道你最多可以加入三張桌子,但我不知道如何加入這四張桌子。請幫忙。先謝謝你。

回答

0

2種方式是在SQL 1或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

加入的四個表只是一個匹配了列的事情,那麼一切都屬於地方:

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 = ? 
    ... 
+0

該代碼似乎是正確的,但是當我嘗試運行查詢時,即使使用select *也沒有結果。所有的列顯示,但沒有行。 – user1025064

+0

@ user1025064:你使用了什麼?''佔位符? –

+0

這是我的SQL代碼: 從預訂 選擇* 加入上reservation.roomnumber房間= room.roomnumber 加入上room.roomtypeid = roomtype.roomtypeid roomtype其中GuestID = 1 – user1025064