在给定开始和结束预订日期的情况下,在MySQL数据库中查找成本最高的预订

时间:2015-10-09 05:05:39

标签: mysql

我正在研究MySQL中的类任务,作为此任务的一部分,我们有几个表,尽管与此相关的表称为“预订”,“房间”和“room_type”(请参阅下面的生成样本数据。)

INSERT INTO `booking` (`bookingid`, `name`, `date_start`, `date_end`, `aname`) VALUES
(1, 'Holly Telfer', '2015-09-28', '2015-10-02', 'Pullman Brisbane King George Square'),
(2, 'Austin Creer', '2015-10-01', '2015-10-10', 'Pullman Brisbane King George Square'),
(3, 'Cooper Noble', '2015-10-11', '2015-10-15', 'Emporium Hotel');

INSERT INTO `rooms` (`room_name`, `aname`, `bookingid`) VALUES
('Standard Suite', 'Pullman Brisbane King George Square', 2),
('Premium Suite', 'Pullman Brisbane King George Square', 1),
('Penthouse', 'Emporium Hotel', 3);

INSERT INTO `room_type` (`rname`, `price`) VALUES
('Penthouse', 600),
('Premium Suite', 350),
('Standard Suite', 270);

我们要做的是使用预订的开始和结束日期加上room_type表中给出的每晚价格来计算每个预订的总价格,然后返回总价最高的预订(我可能会将第一个查询称为视图)。这是我到目前为止所写的查询,但在运行时失败的情况非常糟糕。

SELECT bookingid,DATEDIFF(date_end,date_start) * price AS total_price
FROM booking,room_type
WHERE date_start<=date_end AND date_end >=date_start

这是输出:

"1","4200"
"2","3600"
"3","1200"
"1","2380"
"2","2040"
"3","680"
"1","4480"
"2","3840"
"3","1280"
"1","9100"
"2","7800"
"3","2600"
"1","1386"
"2","1188"
"3","396"
"1","1540"
"2","1320"
"3","440"

这可能是一件非常简单的事情,但我似乎无法理解为什么会这样做,所以如果有人能指出我正确的方向,我将非常感激。感谢。

1 个答案:

答案 0 :(得分:2)

您需要加入3个表格,然后根据您的要求编写逻辑基础。

Select b.id,DATEDIFF(b.date_end,b.date_start) * rt.price from booking b
LEFT JOIN rooms r ON r.bookingid = b.bookingid
LEFT JOIN  room_type rt ON rt.rname = r.room_name
WHERE b.date_start <= b.date_end;

如果只是复制粘贴上述查询中的条件。您可以更改SELECT语句以获取其他结果。