好的,所以我在数据库(日历)中有一个表(时间表),如果格式化的话,如下所示:
+----+--------+-----------+-----------+---------+
| 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循环,以及语句是否大于或小于时间字段?但是似乎很混乱,我在想可能有一个我想不到的更聪明的最终优雅解决方案。
感谢您提供的任何帮助。
答案 0 :(得分:0)
您可以使用 SQL 中的 JOIN 进行操作,如下所示:-
要查找“任何重叠”,可以将时间范围的两端进行比较。
SELECT * FROM timetable a
JOIN timetable b
on a.starttime <= b.endtime
and a.endtime >= b.starttime
and a.name != b.name;