2010-05-05 42 views
1

另一個表匹配結果添加列這是我在choosen期間可用客房查詢:從第一MySQL查詢

SELECT rooms.room_id 
    FROM rooms 
WHERE rooms.room_id NOT IN ( 
    SELECT reservations.room_id 
    FROM reservations 
    WHERE ( reservations.arrivaldate >= $arrival_datetime 
      AND reservations.departuredate <= $departure_datetime 
     ) 
     OR ( reservations.arrivaldate <= $arrival_datetime 
      AND reservations.departuredate >= $arrival_datetime 
     ) 
     OR ( reservations.arrivaldate <= $departure_datetime 
      AND reservations.departuredate >= $departure_datetime 
     ) 
); 

如何爲選定時段(arrival_datetime departure_datetime從$至$)加平均房價柱從另一個表(room_prices_table)中,查詢從上面返回的每個room_id。所以,我需要在列看看衛生組織的名字是一樣的... ROOM_ID

room_prices_table: 
date 
room0001 
room0002 
room0003 
... 

喜歡的東西

SELECT AVG(room0003) 
    FROM room_prices_table 
WHERE datum IS BETWEEN $arrival_datetime 
        AND $departure_datetime 

+1

這是功課嗎?看起來很像一個表哥http://stackoverflow.com/questions/2269556/retrieving-specific-tuples-using-mysql – lexu 2010-05-05 04:36:56

+0

@lexu:很好的觀察。看起來有一個班正在進行這個項目:-D – bernie 2010-05-05 04:43:27

+0

@Adam Bernier:那也是我的印象。不過,他的問題不同於自己。但在其他問題中的reservation_range/free_range檢測比他在這裏展示的(3 ORs!,yuck)更好。 – lexu 2010-05-05 05:18:36

回答

1

事情是這樣的:

SELECT 
    r.room_id, 
    COALESCE(AVG(rpt.room0003), 0) AS AVERAGE_RATE 
FROM rooms r 
    LEFT OUTER JOIN room_prices_table rpt 
    ON r.room_id = rpt.room_id 
AND 
    rpt.datum BETWEEN $arrival_datetime AND $departure_datetime 
WHERE 
    r.room_id NOT IN (
    SELECT reservations.room_id 
     FROM reservations 
     WHERE (reservations.arrivaldate >= $arrival_datetime AND 
      reservations.departuredate <= $departure_datetime) OR 
      (reservations.arrivaldate <= $arrival_datetime AND 
      reservations.departuredate >= $arrival_datetime) OR 
      (reservations.arrivaldate <= $departure_datetime AND 
      reservations.departuredate >= $departure_datetime) 
    ) 
GROUP BY 
    r.room_id; 

使用COALESCE function確保我們的客房,在room_prices_table沒有信息得到0,而不是空的。

+0

謝謝Adam,我會試着理解這個查詢。但是,我需要每個從預訂返回的room_id,而不僅僅是room0003。什麼是表中? – Nemi 2010-05-06 22:18:46

+0

@Nemi:你有沒有試過這個查詢?這應該返回所有'room_id's,'0'代表沒有'room0003'的'room_id'。 'r'只是名爲「別名」的餐廳名稱。你不需要它,它只是爲了節省打字。 – bernie 2010-05-07 02:19:07

+0

我給例如room0003時犯了一個錯誤,我想在一排的結果是:1。 ROOM_ID 2. average_rate_of_room_id_for_given_period 是否有可能有一個查詢? – Nemi 2010-05-08 16:38:36