1

フロント エンドとして FullCalendar を使用してカレンダー システムを構築しています。バックエンドは MySQL/PHP になります。

アプリケーションによって生成および挿入された、ユーザーの公開予定のリストを格納します。これらの予定は、同じ日に開始および終了する単一のイベントになります。さらに、ユーザーは、個人的な約束のためにカレンダーで利用できないことをマークすることができます. この後者の機能では、定期的なイベントを使用する必要があります。iCal に基づく構造を使用して、私が検討してきたホイールを再発明するのではなく。この投稿は、データベース構造を決定する上で、ical-field-list-for-database-schema-based-on-ical-standardに非常に役立ちました。

プライベートな単一/定期的な予定を保存するために、ユーザーが必要なデータを入力できるアプリケーション フォームを作成しました。フォームが送信されると、データは Ajax 経由でサーバーに送信されます。ユーザーがネイティブ形式または RRULE を使用して入力したパラメーターに基づいて、定期的な日付の配列を生成する優れた PHP スクリプトを見つけました。

これらの定期的な日付を保存/取得する最良の方法は何ですか。アプリケーションは、公開日と非公開日を含むユーザーのカレンダー ビューを表示できる必要があります。アプリケーションは、たとえば、特定の時間/日付の期間に空いている可能性のあるすべてのユーザーを返すことができる必要もあります。

すべてのイベントを iCal 形式で保存し、必要に応じてイベントを取得できれば十分ですか? 私が予見する問題は、その場でパラメーターを展開する必要があるため、繰り返しイベントを簡単に検索できないことですか? 私は、それを作成した元の RRULE への参照を使用して、すべての個々のイベント (生成されたもの) の 2 番目のテーブルを作成することを検討していました。今後 100 年間、ユーザーが毎日イベントに参加することを防ぐために、ユーザーが入力できる定期的な日付の数を制限することを検討します! このアプローチは、もともと定期的なルールによって作成された個々のイベントを編集するのにも役立つと思います。

これは良いアプローチですか、それとももっと良い方法がありますか?

4

2 に答える 2

1

次の行に沿った表はどうですか。

CREATE TABLE RecurringAppointments (
    startdate DATE NOT NULL,
    enddate   DATE,
    freq      INT  NOT NULL, -- contains #days between each occurrence
    -- etc.
 )

次に、特定の で発生するそのようなすべての予定を取得するには、次のようにしますthedate

SELECT * FROM RecurringAppointments
WHERE
      thedate BETWEEN startdate AND enddate
  AND DATEDIFF(thedate, startdate) % freq = 0;
于 2012-04-25T17:26:05.607 に答える
1

カレンダー アプリを作成するときに参照してください。データベースに日付または繰り返しルールを保存する必要がありますか? .

有効性情報に関連付けられた rrule、exrule、rdate、および exdate を保存する必要があります (時間の経過に伴う変化を追跡できるようにするため: たとえば、ユーザーが特定のイベントが発生したときに過去を振り返りたい場合や、その間に rrule が変更された場合など)。発生と彼/彼女が振り返る時点)、発生回数が有限のイベントの場合、クエリを簡単にするために時間ウィンドウの開始と終了の事前計算を行い、発生があるローリングウィンドウを持ちますテーブル内のすべてのイベントの。ユーザーがタイム ウィンドウ外のオカレンスを検索する場合 (1 年以上前または 1 年以上先を見ている人はほとんどいないはずです)、ユーザーが要求しているタイム ウィンドウに固有の関連イベントを計算し、その場で生成します。 .

于 2012-05-05T07:10:30.077 に答える