2

私がしようとしていること!

jquery、php、mysqlを使ってイベントカレンダーを作っています。作成されたイベントは mysql データベースに保存され、フェッチされてカレンダーに表示されます。イベントには開始日と終了日が含まれます。ユーザーが、たとえば 1 週間にわたって繰り返すイベントを作成したい場合、カレンダーの定期的なプロパティを使用して、定期的な終了日をイベントの開始から 1 週間に設定できます。

私がブロックされている場所!

ユーザーが、誕生日のように終わらない定期的なイベントや、毎週繰り返される毎週のイベントを必要としているとします。この場合、各イベントをデータベースに何年も挿入するのは良い方法ではないと思います。ユーザーが 2 年間毎日繰り返されるイベントを作成する別のケースを考えてみましょう。ここで、データベースは非常にポピュレートされます。

私が探しているもの!

終了日がない、または終了日が非常に長い繰り返しイベントを管理する方法について、誰かが私にアイデアを提供してくれませんか。

4

1 に答える 1

0

多分あなたは3つのテーブルが必要です

  • イベントベース
    • イベント、名前、場所、期間、詳細など
  • イベント_インスタンス
    • 繰り返し発生するイベントの実際のインスタンスについて
    • ユーザーがその月/週/日などを表示しようとしたときにのみインスタンスを作成します。
    • その日にインスタンスが存在しない場合にのみインスタンスを作成する
    • 元の日付と現在の日付がある (このインスタンスを移動できる場合)
  • event_reoccurrence テーブル
    • 終了日フィールド付き。終了日が null の場合、終了日はありません。

サンプルの event_instance テーブル スキーマを次に示します。

  1. event_base_id
  2. event_reoccurrence_id (再発がない場合は null) イベントを作成したルール。
  3. Original_created_for_date (ユーザーがインスタンスを移動した場合、元の日付に再度追加されることはありません)
  4. current_date (カレンダーに表示される日付
  5. location_override
  6. duration_override
  7. その他のオーバーライドなど

サンプルの event_reoccurrence テーブル スキーマ (再発ルール) を次に示します。

  1. event_reoccurrence_id
  2. event_base_id (unsigned int)
  3. day_of_week varchar(20)
  4. day_of_month varchar(20)
  5. day_of_year varchar(20)
  6. week_of_month varchar(20)
  7. year_of_year varchar(20)
  8. months_of_year varchar(20)
  9. varchar(20)
  10. lastdate_of_reoccurrence日付

#2 から #8 の値は、単一の数字、範囲 "2-6"、コンマで区切られた数字、または null にすることができます。

  • null は無関係を意味します (この値に関係なくイベントが発生する可能性があります)
  • some number: イベントは、その日付が数字と一致する日に発生します
    • weekday: 5 = 金曜日以外の日はイベントが発生しません
  • コンマで区切られた数字: いずれかの数字が一致するとイベントが発生します
    • month: 2, 4, 5 = イベントは 2 月、4 月、5 月に発生する可能性があります
  • range: イベントは range 間で発生します
    • 日: 1-12 = イベントは毎月 1 日から 12 日に発生する可能性があります
  • null 以外のすべてのフィールドが一致する場合、その日にイベントが発生する日付。

したがって、日付をチェックして、すべてのフィールドが null であるか、その日付と一致する場合、イベントはその日付に発生します。おそらく、複雑なパターンを構築するために、イベントごとに複数のエントリを持つことができます。

月の週は、最初の日曜日ではなく、最初の 7 日間になります。week_of_month が 3 で曜日が 2 で、イベント ID 以外のすべてが null の場合、毎月第 3 火曜日のようになります。

次に、その人がカレンダーを表示すると、その月の各日に対してすべての定期的なイベントを要求し、一致する各イベントに対して実際のイベントを作成します

于 2013-12-20T19:09:28.497 に答える