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 日にビルのためにそれを行っていた場合、私が返したいのは次のとおりです。

+--------------+------------+
|   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を2つにすると、必要な出力が得られます。

ある日から別の日にまたがるイベントがある場合は、同じアプローチを取りますが、タイムスタンプを使用し、00:00 を初日の開始のタイムスタンプに置き換え、23:59 をその日の終了のタイムスタンプに置き換えます。最終日。

コードを投稿していないことをお詫びしますが、この場合、単純にコードを配信するよりも、アプローチをよりよく説明できると思います。

于 2012-06-27T12:50:43.420 に答える