sql查询,时间跨度

zysjyyx4  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(342)

我正在写一个脚本来记录参加工作场所的人。我要找出一段时间内谁去过这个地方。
它还必须找到在这段时间里去过那里一段时间的人。
也包括那些在时间开始后到达并且在工作日结束前离开的人。任何在任何时候去过那里的人都需要使用这个sql查询来查找。
我有以下几点。但它只会给我那些从一开始就在那里的人 ($time_from) ,并在结束时间前离开 ($time_to) .

$SQL_String = mysqli_query ($con, "
    SELECT * 
      FROM log 
     WHERE users_name = '" . $username . "' 
       AND login_time >= '" . $time_from . "' 
       AND logout_time <= '" . $time_to . "' 
     ORDER 
        BY dateandtime ASC
    ");
``` `login_time` 以及 `logout_time` 是数据库中用户的开始和结束时间。而 `$time_from` 以及 `$time_to` 是窗体中选定的开始和结束时间。
如果我在这些时间里搜索;
10:00 – 12:00
有这些时间的成员应该被计算在内。9:00 – 10:05
有这些时间的成员应该被计算在内。10:05–11:45应计算有这些时间的成员。11:00 – 12:05
有这些时间的成员应该被计算在内。9:00 – 13:00
简而言之:
我需要找出在给定的时间跨度内谁在工作。不管他们是否在那里呆了一整天,或者迟到,或者早退——如果他们在表格上所读的时间内到过那里。
你能帮我解决这个问题吗??谢谢!
sdnqo3pr

sdnqo3pr1#

您希望任何重叠都是:

select l.*
from log l
where l.login_time < $time_to and
      l.logout_time > $time_from;

逻辑很简单,如果a在b结束之前开始,a在b开始之后结束,那么时间框架a与时间框架b重叠。

axkjgtzd

axkjgtzd2#

您有3个案例:
在规定时间内到达的人
在给定时间内离开的人员
之前到达,之后离开的人员
现在组合成这样:

where 
(arrival >= starttime AND arrival <= endtime) 
OR 
(departure >= starttime AND arrival <= endtime) 
OR
(arrival <= starttime AND departure >= endtime)

哦,顺便说一下:您的sql对sql注入可过滤性是开放的。不要在sql字符串中直接使用变量。

相关问题