我有一个问题对我来说很复杂,但对你们中的一些人来说很容易。这里是:我有一个这样的 MySQL 表
id | username | time_zone | selected
1 XXX +4 1
2 XXX -6 0
3 XXX NULL 1
等等。行数可以超过一百万。(请注意,可能存在未定义时区的用户。)有一个 PHP 脚本通过 cron 作业每小时运行一次,并从表中选择一定数量的行。现在是困难的部分。
- 每小时从表中选择的行数必须相等。(
amount selected = COUNT()/24
) - 每一行每天不得选择超过一次(这就是我在表中添加“已选择”列的原因)。
- 本地时间为下午 1 点到 5 点时,必须选择每个用户。
- 如果用户的时区未定义,则必须从下午 5 点到晚上 8 点选择。
- 如果特定时间的用户数量不足,例如时区 +4 的用户数小于
COUNT()/24
,则可以使用未定义的用户或来自相邻时区的用户来补偿相等性。 - 如果在指定时间内有很多用户,则可以将它们传递到下一个相邻时区。
我不需要代码,但需要逻辑。如果有人可以提供帮助,我会非常满意。如果有任何问题,我可以更详细地讨论。