MySQL / PHP:捕获2次之间的所有条目,并检查其他2次

时间:2013-04-04 09:33:09

标签: php mysql select time match

我有一个数据库,人们可以在两个特定时间内预订房间,但可能有其他人在同一时间内或部分同时搜索可用房间。

数据库看起来像这样:

order | room | user | date (date-format) | from (time) | to (time)
1       123    foo    2013-04-04           12:00:00       17:00:00

当另一个用户在f.ex 13:00到18:00之间搜索房间是否可用时,问题就出现了,因为我只能在同一时间搜索房间是否可用。

查询必须在特定日期和时间搜索特定房间。如果房间全部或者有些时间都很忙,我想抓住这个并告诉用户房间很忙。

任何提示?如果通过PHP管理更容易,我也很高兴: - )

2 个答案:

答案 0 :(得分:2)

为什么不使用像这样的SQL(未经测试)来解决它:

SELECT *
FROM booked
WHERE
    room=$room AND
    date=$date AND
    (
        (
            /*
            The reservation starts in the requested period
            */    
            from <= $start_time AND
            to > $start_time
        ) OR (
            /*
            The reservation ends in the requested period
            */
            from < $end_time AND
            to >= $end_time
        )
    );     

此查询将返回$start_time$end_time之间的所有预订,并允许预订背靠背。如果您不想重新允许预订,请将<>更改为<==>

重要:确保不仅使用字符串插值并插入用户提供的非转义输入,因为它会使您的应用程序容易受到SQL注入攻击。

答案 1 :(得分:0)

@Delphinator对答案的改进

SELECT *
FROM booked
WHERE
    room=$room AND
    date=$date AND
    (
       TIME("$start_time") BETWEEN from and to 
       OR
       TIME("$end_time") BETWEEN from and to
    );

BETWEEN完全符合您的想法。