嗨,外面所有的专家。我在这里有个大问题,还在努力寻找解决方案。我有一个只显示酒店价格的预订系统。一旦客户要求入住房间,我们将通过与酒店联系的方式手动检查可用性。因此,可用性部分,我们不想实现no网站。然而,汇率制度有一些小问题。例如,如果我搜索2014-02-27到2014-03-02的房价,这属于两个日期范围,我会得到两个结果,其中一个结果没有完全完成。这是我的数据库
room id room_name rate_starts rate_ends single_room double_room
1 standard 2014-01-01 2014-02-28 150 200
1 standard 2014-03-01 2014-03-05 200 250
1 standard 2014-03-06 2014-03-31 300 350
2 Garden Villa 2014-01-01 2014-02-28 300 400这是我的查询
SELECT room_id, room_name,
SUM(`single_room` * DateDiff(
Least(rate_ends + INTERVAL 1 DAY, '$ends'),
Greatest(rate_starts, '$starts')
)) AS Total
FROM
room_rate
WHERE
hotel_id = '$hotel_id' AND
rate_ends >= '$starts' AND
rate_starts <= '$ends'
GROUP BY room_id这是我的结果
Standard room 500
Garden Villa 600我在等这个答案标准房500
这里有一个关于什么是真正意义上的小解释。我的搜索是从2014-02-27到2014-03-02,这将在数据库中分为两个日期范围。标准房(150 X 02 = 300 + 200 X 01 = 200) = 500花园别墅(300 X 02 = 600 +此日期范围不在DB中)= 600
这意味着花园别墅的价格并没有完全按照我的搜索要求完成。所以我不应该展示花园别墅的价格。我希望在场的所有天才都能考虑给我一个解决这个问题的办法。
发布于 2014-01-20 07:34:05
SELECT room_id, room_name,
SUM(single_room * DateDiff(
Least(rate_ends + INTERVAL 1 DAY, '$ends'),
Greatest(rate_starts, '$starts')
)) AS Total,
sum(DateDiff(
Least(rate_ends + INTERVAL 1 DAY, '$ends'),
Greatest(rate_starts, '$starts')
)) as num_days
FROM
room_rate
WHERE
rate_ends >= '$starts' AND
rate_starts <= '$ends'
GROUP BY
room_id
having
sum(DateDiff(
Least(rate_ends + INTERVAL 1 DAY, '$ends'),
Greatest(rate_starts, '$starts')
)) = datediff('$ends', '$starts')这个答案很好,感谢@ answer 1455836三周的脑力工作终于解决了
发布于 2014-01-18 08:49:37
在sql查询中使用with子句筛选出天数错误的结果。
就像这样
having sum(DateDiff(
Least(rate_ends + INTERVAL 1 DAY, '$ends'),
Greatest(rate_starts, '$starts')
)) = datediff('$ends', '$starts')https://stackoverflow.com/questions/21201877
复制相似问题