mysql查询酒店可用性(不计算总价)

时间:2013-08-12 15:33:30

标签: mysql

搜索住宿列表和总价格。

以下是我的查询和输出:http://sqlfiddle.com/#!2/eaf58/43

查询:

SELECT count(candidates.accommodation_id) as total, candidates.accommodation_id, omc_accommodation_season_period.season_id,
       room_1, r1_price.price_normal AS room_1_price,
       (SELECT SUM(room1_price.price_normal)
        FROM omc_accommodation_room_pricelist room1_price
        INNER JOIN omc_accommodation_room room1 
        ON room1_price.accommodation_id = room1.accommodation_id
        INNER JOIN omc_accommodation_season_period so1 
        ON room1_price.accommodation_id = so1.accommodation_id 
           AND room1_price.season_id = so1.season_id
        INNER JOIN omc_accommodation accommodation1 
        ON room1_price.accommodation_id = accommodation1.id
        WHERE
           so1.date BETWEEN '2013-08-13' AND '2013-08-15' AND
           room1.quantity >= 3 AND room1.pax_max = 1 AND
           accommodation1.id = candidates.accommodation_id AND
           room1.id = room_1) AS room_1_sum,
       room_2,r2_price.price_normal AS room_2_price,
       omc_accommodation_season_period.date
FROM (SELECT r1.accommodation_id, r1.id AS room_1,
             r2.id AS room_2, r1.quantity AS room_1_quantity,
             r2.quantity AS room_2_quantity
      FROM
         omc_accommodation_room r1
      INNER JOIN
         omc_accommodation_room r2 ON r1.accommodation_id = r2.accommodation_id
      WHERE
          r1.quantity >= 3 AND r2.quantity >= 4 AND r1.pax_max = 1 AND r2.pax_max = 2) AS candidates
LEFT JOIN omc_accommodation_season_period
          ON candidates.accommodation_id = omc_accommodation_season_period.accommodation_id
             AND date BETWEEN '2013-08-13' AND '2013-08-15'
             AND omc_accommodation_season_period.date <> 0
LEFT JOIN omc_accommodation_room_extra_quota eq1
          ON (candidates.accommodation_id = eq1.accommodation_id
              AND room_1 = eq1.room_type_id
              AND eq1.date=omc_accommodation_season_period.date)
LEFT JOIN omc_accommodation_room_extra_quota eq2
          ON (candidates.accommodation_id = eq2.accommodation_id
              AND room_2 = eq2.room_type_id
              AND eq2.date=omc_accommodation_season_period.date)
LEFT JOIN omc_accommodation
          ON candidates.accommodation_id = omc_accommodation.id
LEFT JOIN omc_accommodation_room_pricelist r1_price
          ON (candidates.accommodation_id = r1_price.accommodation_id
              AND room_1= r1_price.room_type_id)
LEFT JOIN omc_accommodation_room_pricelist r2_price
          ON (candidates.accommodation_id = r2_price.accommodation_id
              AND room_1 = r2_price.room_type_id)
WHERE
    r1_price.season_id =  omc_accommodation_season_period.season_id
    AND
    r2_price.season_id =  omc_accommodation_season_period.season_id
GROUP BY candidates.accommodation_id, omc_accommodation_season_period.date

问题只是计算每个房间的总价格。

帮我解决一下..

非常感谢提前

1 个答案:

答案 0 :(得分:0)

SELECT rsp1.date, rsp1.season_id, r1.hotel_id, r1.id AS room_1, rp1.price_normal AS room_1_price, SUM(rp1.price_normal) AS room_1_total, r2.id AS room_2, rp2.price_normal AS room_2_price
FROM
omc_hotel_room r1
LEFT JOIN omc_hotel_room r2 ON r1.hotel_id = r2.hotel_id
INNER JOIN omc_hotel_room_pricelist rp1 ON r1.hotel_id = rp1.hotel_id AND r1.id = rp1.room_type_id
INNER JOIN omc_hotel_room_pricelist rp2 ON r1.hotel_id = rp1.hotel_id AND r2.id = rp2.room_type_id
LEFT JOIN omc_hotel_season_period rsp1 ON r1.hotel_id = rsp1.hotel_id
WHERE
    r1.pax_max = 1 AND 
    rp1.price_normal <> 0 AND
    r2.pax_max = 2 AND 
    rp2.price_normal <> 0 AND
    rsp1.date BETWEEN '2013/08/13' AND '2013/08/15'
GROUP BY r1.hotel_id, rsp1.date