好的,所以我在数据库(日历)中有一个表(时间表),如果格式如下:
+----+--------+-----------+-----------+---------+
| id | name | day | startTime | endTime |
+----+--------+-----------+-----------+---------+
| 1 | George | Sunday | 12:00 | 14:00 |
| 2 | Dan | Monday | 13:30 | 15:30 |
| 3 | Jeff | Wednesday | 12:00 | 14:00 |
| 4 | Bill | Monday | 13:45 | 15:45 |
+----+--------+-----------+-----------+---------+
然后我有一些 PHP 如下:
<?php
$sql = "SELECT * FROM timetable WHERE id IN (1, 2, 3, 4)"
$result = $con->query($sql);
while ($row = mysqli_fetch_assoc($result)) {
$array2[] = $row;
}
echo json_encode($array2, JSON_PRETTY_PRINT);
?>
然后将整个表输出为 JSON 格式的关联数组。
我希望它只输出冲突的两个。由于输入法的原因,数据库中永远不会有超过两个冲突,所以它只需要检查是否有一个冲突,并输出两行的 JSON。
我不确定从哪里开始。是通过 PHP 以编程方式完成它更好,还是有办法使用 mysql 来完成?我在想它是否以编程方式完成,也许两个嵌套的 for 循环和 if 语句大于或小于时间字段?但是看起来很乱,而且我认为可能有一个我想不到的更聪明的最终优雅解决方案。
感谢您提供的任何帮助。
最佳答案
您可以在 SQL 中使用 JOIN 来实现,如下所示:-
要找到“任何重叠”,您需要将时间范围的两端相互比较。
SELECT * FROM timetable a
JOIN timetable b
on a.starttime <= b.endtime
and a.endtime >= b.starttime
and a.name != b.name;
关于php - 从 select 语句中查找重叠时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56435716/