私には複雑に思える質問がありますが、一部の人にとっては簡単かもしれません。ここにあります:私はこのようなMySQLテーブルを持っています
id | username | time_zone | selected
1 XXX +4 1
2 XXX -6 0
3 XXX NULL 1
等々。行数は 100 万を超える場合があります。(タイム ゾーンが定義されていないユーザーがいる可能性があることに注意してください。) cron ジョブを介して 1 時間ごとに実行され、テーブルから一定量の行を選択する PHP スクリプトがあります。今、難しい部分です。
- テーブルから選択される行数は、1 時間ごとに等しくなければなりません。(
amount selected = COUNT()/24
) - 各行は 1 日に複数回選択してはなりません (そのため、テーブルに「選択済み」列を追加しました)。
- 現地時間が午後 1 時から午後 5 時までの場合、すべてのユーザーを選択する必要があります。
- ユーザーのタイムゾーンが定義されていない場合は、午後 5 時から午後 8 時の間で選択する必要があります。
- ユーザー数が特定の時間に十分でない場合、たとえば、タイム ゾーン +4 のユーザー数が 未満の場合
COUNT()/24
、未定義のユーザーまたは隣接するタイム ゾーンのユーザーを使用して均等性を補うことができます。 - 指定された時間に多くのユーザーがいる場合は、次の近隣のタイム ゾーンに渡すことができます。
コードは必要ありませんが、ロジックが必要です。誰かが私を助けることができれば、私は非常に充実しています。質問があれば、もっと詳しく説明できます。