0

このテーマに関する多くのスタックオーバーフローの回答を見てきましたが、それらはすべて別の方向から来ているようです。これが私がやりたいことです。この段階では、特定のコードを書くよりも、それにアプローチする方法について頭を悩ませています。

タスクは、ユーザーが既存のコミットメントに基づいて表示できるショーを表示することです。それが利用できないか、すでに何か他のものを見ているかどうかに関係なく。

表 A には、ユーザーが使用できない状態の開始時間と終了時間のリストが含まれています

表 B には、ユーザーの既存の予約の開始時間と終了時間のリストが含まれています。

表 C には、すべてのショーの開始時間と終了時間のリストが含まれています。

これにさらに詳細を追加するために、FullCalendar のアジェンダビューを使用してユーザーのコミットメントを表示しています。その隙間に、彼らが見ることができたショーを表示したい. 利用不可と既存のコミットメントを表示するコードは既に作成されていますが、表 A および B のエントリと衝突しない表 C のショーを見つけようとしている手がかりがありません。

何か案は?

4

1 に答える 1

0

私の解決策はPHP用ですが、SQLストアドプロシージャなどに隠れているより良い解決策があると確信しています。

Unix Time を使用している場合は、開始時刻と終了時刻を比較することで、空いているスロットを簡単にテストできます。

  1. ユーザーが利用できるスロットのリストを動的に作成します。
  2. このリストを繰り返し、空いているスロットを表 C の各ショーと比較します。

    if (
           (showtime['begin'] >> opentime['begin']) &&
           (showtime['end'] << opentime['end'])
       ) return true;
    
  3. 一致するものが見つかったら、それを印刷します。

編集:

少し考えた後、おそらくより良い解決策を思いつきました。すべてを項目ごとに比較しないことから逃れる方法はありません。秘訣は、すべての処理を一度に行うのではなく、アプリのライフサイクル全体に分散させることです。

  • データベースを編集し、期間フィールドをすべてのテーブルに追加します。
  • テーブルの更新をトリガーするストアド プロシージャを作成します (mySQL で実行できますよね?)。このプロシージャは期間を計算し、そのタプルの対応するフィールドに入力します。
  • ここで、期間 =< いくつかの空きスロットであるすべてのタプルを選択します

このように、面倒な作業はすべて PHP ではなく SQL で行われるため、より高速になる可能性があります。

于 2013-05-08T12:38:04.267 に答える