1

所以我有 2 个表,一个用户表和一个约会表。我想要做的是从不存在的数据库中获取时间。

我将举几个例子,因为这可能没有任何意义,下面是我的 2 个表。

+-----------------+
|      Users      |
+-----------------+
|  ID  |   Name   |
+------+----------+
|  1   |   Bill   |
|  2   |   John   |
+------+----------+

+-------------------------------------------------------------------------+
|                                   Appointments                          |   
+----------+--------------------+-------------------+---------------------+
|  UserID  |    DateTimeFrom    |    DateTimeTo     |   AppointmentName   |     
+----------+--------------------+-------------------+---------------------+
|     1    |  2012-06-16 10:00  |  2012-06-16 11:00 |      Hair Cut       |
|     1    |  2012-06-16 14:30  |  2012-06-16 16:00 |         Work        |
|     1    |  2012-06-16 19:00  |  2012-06-16 22:00 |  Dinner and Drinks  |
|     2    |  2012-06-16 07:00  |  2012-06-16 10:30 |      Travelling     |
|     2    |  2012-06-16 16:00  |  2012-06-16 16:30 |        Dentist      |
+----------+--------------------+-------------------+---------------------+

我想要返回的是空时间或倒数时间,例如,如果我只是在 6 月 16 日为 Bill 做这件事,那么我想要返回的是:

+--------------+------------+
|   TimeFrom   |   TimeTo   |
+--------------+------------+
|    00:00     |    10:00   |
|    11:00     |    14:30   |
|    16:00     |    19:00   |
|    22:00     |    23:59   |
+--------------+------------+

如果我在 6 月 16 日为两个用户都这样做,那么我会得到类似的结果:

+--------------+------------+
|   TimeFrom   |   TimeTo   |
+--------------+------------+
|    00:00     |    07:00   |
|    11:30     |    14:30   |
|    16:30     |    19:00   |
|    22:00     |    23:59   |
+--------------+------------+

或者尽可能接近的东西。我不知道在 MySQL 中是否有一个好的方法,或者我是否必须使用 PHP 将时间转换为它们的倒数。

提前致谢。

4

1 回答 1

1

据我所知,mysql 中没有直接处理此问题的功能,但是在 PHP 中很容易处理。

如果您没有任何从一天到另一天的事件,那么您需要做的就是将所有时间按顺序放入一个数组中(开始,结束,开始,结束,开始,结束......)然后 array_unshift '00:00' 开始,array_push '23:59' 结束,然后 array_chunk 两个,你会得到你想要的输出。

如果您确实有跨越一天到另一天的事件,那么您采用相同的方法,但使用时间戳,将 00:00 替换为第一天开始的时间戳,将 23:59 替换为结束的时间戳最后一天。

很抱歉没有发布代码,但我觉得在这种情况下,这种方法比简单地提供代码来解释更好。

于 2012-06-27T12:50:43.420 回答