douwen2158 2017-09-09 14:41
浏览 67
已采纳

sql查询重叠时间

enter image description here

I have a table for class reservation name book. I also have a table that has room data which is called room.

I'm trying to make a condition where if the room is already booked for a specific time period such as 08:00 am till 09:00 am - you cant book the class. But if not then you can .

my sql is:

SELECT * FROM book WHERE room_id = '$room_id' and start_date = '$date' and start_time = '$starttime' BETWEEN (SELECT MIN(start_time) AS mintime
FROM book WHERE room_id = '$room_id' and start_date = '$date') and (SELECT MAX(end_time) AS maxtime
FROM book WHERE room_id = '$room_id' and start_date = '$date')

If the sql returns a row then the user cant book the room .

Sometimes this sql works but sometimes it fails . Is it right what am I doing here ?

  • 写回答

1条回答 默认 最新

  • dongmuyan5638 2017-09-09 14:50
    关注

    It often helps if you write out your query in a readable format:

    SELECT * 
    FROM book 
    WHERE room_id = '$room_id' AND
          start_date = '$date' AND
          start_time = '$starttime' 
    BETWEEN (SELECT MIN(start_time) AS mintime
             FROM book 
             WHERE room_id = '$room_id' AND 
                   start_date = '$date') AND
            (SELECT MAX(end_time) AS maxtime
             FROM book 
             WHERE room_id = '$room_id' AND
                   start_date = '$date')
    

    Now you can clearly see you use only one table, namely book but two subqueries. That's seems a bit much and you're not using BETWEEN in the correct way. Why not query like this:

    SELECT * 
    FROM book 
    WHERE room_id = '$room_id' AND
          start_date = '$date' AND
          '$starttime' BETWEEN start_time AND end_time
    

    I should, of course, warn about SQL-injection.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 pnpm 下载element-plus
  • ¥15 解决编写PyDracula时遇到的问题
  • ¥15 有没有人能解决下这个问题吗,本人不会编程
  • ¥15 plotBAPC画图出错
  • ¥30 关于#opencv#的问题:使用大疆无人机拍摄水稻田间图像,拼接成tif图片,用什么方法可以识别并框选出水稻作物行
  • ¥15 Python卡尔曼滤波融合
  • ¥20 iOS绕地区网络检测
  • ¥15 python验证码滑块图像识别
  • ¥15 根据背景及设计要求撰写设计报告
  • ¥20 能提供一下思路或者代码吗