MySQL:sql查询/过程,用于根据预订的房间总数获取每个酒店的累计房间

时间:2018-08-11 13:40:59

标签: mysql sql

我有一个产品,可帮助您预订不同目的地的客房,以及指定日期的酒店。我已经在数据库中获得了所有可用信息,并且在除上一种情况以外的所有情况下都可以正常工作。

  • 一间客房(可以正常工作):用户可以搜索一间客房的酒店(2位成人)
  • 多个具有相同占用率的房间(工作正常):用户可以预订多个房间,但每个房间都占用相同的房间(例如:3个房间,每个房间有2位成人)
  • 具有不同占用率(不工作)的多个房间::在这种情况下,用户正在酒店中寻找3个房间,而每个房间都有不同的占用率(例如:Room1: 2 Adults,{{1} },Room2: 1 Adults)。我已经为我的数据库中的每家酒店提供了每个可用房间的信息(房间价格为1/2/3人的价格信息)(房间也有它们的类型:单人床/双人标准)。

现在的问题是要显示在房间中,因为我已经在数据库中获取了所有可用房间(房间及其占用率##标题##)的个人信息,但是我必须向最终用户显示累积的结果。意味着我必须对满足用户要求的房间(可能是不同房间类型)进行分组/组合。

以下是预订的Ex:

用户正在寻找3个占用不同的房间(7人)

例如:

房间1::2位成人1位儿童

房间2: 3位成人0位儿童

房间3: 1位成人0位儿童

下面是db中可用的信息。现在,要合并一家旅馆中至少拥有Room3: 3 Adults1 Room with 2AD & 1CH1 Room with 3AD且必须以总价显示的所有客房。

注意:组合价格应为最低价格。

预期结果:

对于酒店ID:1

可能的组合可以是(ID):

1 Room with 1AD //正确或最可取的,因为id 1&2具有相同的rootype和Board。因此,在这里我们满足了roomCount = 3和所有入住人数= 7 TotalPrice = 324.75

的条件

1,2,4 //仅当没有相同的房型和boardCode时,这种情况才是可取的

在这里我们可以在酒店ID中说:1我们只有1个房间,可以组合为1,2,4 / 1,3,4

与其他酒店相同。

DB Snippet Please Click Here

SQL Fiddle Click Here (用于示例数据库架构)

这是我的过程,它给我带来预期的结果,但是唯一的问题是固定了3个房间的游标(我声明为3个游标),而用户可以查找1到10个具有不同占用率的房间。您能否帮助我使其动态化,以便我可以获取任意数量的房间的记录。

1,3,4

如果需要其他信息,请告诉我

您的帮助确实非常可观。

谢谢!!!!

1 个答案:

答案 0 :(得分:0)

请考虑以下内容...

SELECT DISTINCT room1.hoteid
              , room1.id r1
              , room2.id r2
              , room3.id r3
           FROM booking_rooms room1 
           JOIN booking_rooms room2
             ON room2.hoteid = room1.hoteid
            AND room2.id <> room1.id
           JOIN booking_rooms room3
             ON room3.hoteid = room1.hoteid
            AND room3.id <> room1.id
            AND room3.id <> room2.id

          WHERE room1.totaladults >= 2 AND room1.totalchildren >= 1
            AND room2.totaladults >= 3 AND room1.totalchildren >= 0 
            AND room3.totaladults >= 1 AND room3.totalchildren >= 0;
          ORDER 
             BY room1.totaladults + room2.totaladults + room3.totaladults
              , room1.totalchildren + room2.totalchildren + room3.totalchildren

http://sqlfiddle.com/#!9/08cc04/7

还请注意,价格通常为DECIMAL,房间数,totalAdults和totalChildren均为TINYINT