アプリケーションには毎週繰り返されるイベントがあり、各イベントの開始時刻と終了時刻を週の初め (日曜日の午前 12 時) からの秒数として保存することにしました。これにより、クエリや並べ替えなどがはるかに簡単になります。
ただし、小さな問題が 1 つあります。週のリセットに近い時間に発生しているイベントを取得したい場合、そのイベントがそのギャップを埋める可能性があり、クエリが難しくなります。
指定された時間がレコードの開始時間と終了時間の間にあるレコードを取得するために、99% の時間で機能する通常のクエリ。
time = 216000 # Tuesday, 12:00PM
SELECT * FROM events WHERE start_time <= 216000 AND end_time > 216000
難しいのは、たとえば、土曜日の午後 11 時に開始し、日曜日の午前 2 時に終了するイベントがある場合です。
time = 3600 # Sunday, 1am
SELECT * FROM events WHERE start_time <= 3600 AND end_time > 3600
start_time
これは、週サイクルの終わり近くに開始されるため、 が 3600 未満になることはないため、何も返されません。
私は良い解決策を考え出すために数時間頭を悩ませてきましたが、これまでのところ不十分なので、私が考えていない解決策があるかどうかを確認するためにそれを開いてみたいと思いますの。これを行うために使用できる簡単な数学の方程式があると感じていますが、数学は私の最良の科目ではありません:)
もっと詳しく説明したり、より良い例を挙げたりする必要がある場合はお知らせください。
ありがとう!