首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回正确结果和错误结果的房价

返回正确结果和错误结果的房价
EN

Stack Overflow用户
提问于 2014-01-18 08:32:31
回答 2查看 75关注 0票数 0

嗨,外面所有的专家。我在这里有个大问题,还在努力寻找解决方案。我有一个只显示酒店价格的预订系统。一旦客户要求入住房间,我们将通过与酒店联系的方式手动检查可用性。因此,可用性部分,我们不想实现no网站。然而,汇率制度有一些小问题。例如,如果我搜索2014-02-27到2014-03-02的房价,这属于两个日期范围,我会得到两个结果,其中一个结果没有完全完成。这是我的数据库

代码语言:javascript
复制
    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

这是我的查询

代码语言:javascript
复制
     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

这是我的结果

代码语言:javascript
复制
    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

这意味着花园别墅的价格并没有完全按照我的搜索要求完成。所以我不应该展示花园别墅的价格。我希望在场的所有天才都能考虑给我一个解决这个问题的办法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-20 07:34:05

代码语言:javascript
复制
    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三周的脑力工作终于解决了

票数 0
EN

Stack Overflow用户

发布于 2014-01-18 08:49:37

在sql查询中使用with子句筛选出天数错误的结果。

就像这样

代码语言:javascript
复制
having sum(DateDiff(
     Least(rate_ends + INTERVAL 1 DAY, '$ends'),
      Greatest(rate_starts, '$starts')
     )) = datediff('$ends', '$starts')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21201877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档