gpt4 book ai didi

php - 从 select 语句中查找重叠时间

转载 作者:行者123 更新时间:2023-11-30 21:30:36 24 4
gpt4 key购买 nike

好的,所以我在数据库(日历)中有一个表(时间表),如果格式如下:

+----+--------+-----------+-----------+---------+
| 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com