私はイベントカレンダーを作成しようとしていますが、最初は非常に小さいものでしたが、非常に大きいことが判明する可能性があります。そのために、可能な限り将来を保証しようとすると、過去に発生したすべてのイベントがデータベースから削除されます。ただし、次のイベントがいつ開始されるかを示すために、定期的なイベントの開始日を変更するのは悪い習慣ですか?これにより、データベースが更新される頻度にもよりますが、理論的には過去1週間を超えて開始されるイベントはないため、検索クエリの実行が容易になります。
これを行うためのより良い方法はありますか?
私の現在の意図は、イベントの詳細と、それが毎年、毎月、毎週、または毎日の繰り返しであるかどうかの列をリストした表を作成することです。次に誰かが2つの日付の間のイベントを検索するとき、私は単に各行を見て、(EVENT START <= SEARCH FINISH && EVENT FINISH> = SEARCH START)かどうかを確認します。次に、これによりすべての可能なイベントが取得され、定期的なイベントをチェックして、指定された期間中に発生するかどうかを確認する必要があります。これを具体的にどのように達成するかについて、私はここで少し行き詰まりました。私の考えは次のとおりです。
毎年:イベント開始+1年<=検索終了の場合|| イベント終了+1年>=検索開始; イベント開始+年なし>検索終了まで+2年などを繰り返します。
毎月:上記と同じですが、毎回+1か月です。
毎週:上記と同じですが、EVENTSTARTとEVENTFINISHは、EVENT START + 7 DAYS REPEATED> SEARCH FINISHまで、各反復の繰り返しの間にプラス7日が加算されます。
毎日:上記と同じですが、1週間の7日ではなく、日数の違いはありません。これは、14日ごと(2週間)、10日ごとなどを指定するために使用できます。毎週でもこの方法を使用できます。
ただし、これを実現するために作成する必要のあるクエリについて考えると、非常に面倒で、おそらく低速になると思わざるを得ません。私が望む結果を達成するためのより良い方法はありますか?月の第1月曜日、月の最終金曜日、または毎年4月の第2土曜日に発生するようなことを行う方法をまだ見つけていません。これらの後者のオプションも可能ですか?
-編集:以下に追加:
私が作成しているものについてもう少し説明すると、少し役立つかもしれません。そうすれば、それに関してガイダンスを与えることができます。
私は、組織が1回限りのイベントでも定期的なイベントでも(毎日、毎週、毎月、毎月第1火曜日など)イベントを追加できるWebサイトを作成しています。サイトのユーザーは、選択した距離(任意の10、25、50、100マイル、国全体)内のイベントを、設定された日付または2つの指定された日付の間で検索できます。数年離れています(明らかに、使用される日付に応じて、はるか先のイベントは最小限になるか、存在しなくなります)。
EVENTSテーブル自体には、現在、場所、コスト、年齢層など、イベントに関する多くの情報が保持されています。イベントが指定された検索パラメータ?明らかに、詳細なページビューまで、この情報のすべてが必要なわけではありません。名前、場所、コスト、簡単な説明だけかもしれません。
猫の皮を剥ぐ方法はたくさんありますが、どうやって皮を剥ぐのかわかりません。私が苦労している最大のことは、再帰が指定された日付内にあるかどうかをクエリが認識できるようにデータを構造化する方法です。また、2 lat / long間の距離を計算する数学は比較的複雑なので、この計算をクエリに組み込むことができる必要があります。そうでない場合は、とにかくPHPで計算を行います。確かに、この方法で処理する結果は少なくなりますが、それでも実行する必要があります。
さらにアドバイスをいただければ幸いです。