我有一个产品,可帮助您预订不同目的地的客房,以及指定日期的酒店。我已经在数据库中获得了所有可用信息,并且在除上一种情况以外的所有情况下都可以正常工作。
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 Adults
,1 Room with 2AD & 1CH
和1 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
与其他酒店相同。
SQL Fiddle Click Here (用于示例数据库架构)
这是我的过程,它给我带来预期的结果,但是唯一的问题是固定了3个房间的游标(我声明为3个游标),而用户可以查找1到10个具有不同占用率的房间。您能否帮助我使其动态化,以便我可以获取任意数量的房间的记录。
1,3,4
如果需要其他信息,请告诉我
您的帮助确实非常可观。
谢谢!!!!
答案 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