gpt4 book ai didi

php - 按时区从sql表中排序和选择

转载 作者:太空宇宙 更新时间:2023-11-03 12:28:41 25 4
gpt4 key购买 nike

我有一个问题,这个问题对我来说很复杂,但对你们中的一些人来说可能很简单。这里是:我有一个像这样的 MySQL 表

id  |  username  |  time_zone | selected
1 XXX +4 1
2 XXX -6 0
3 XXX NULL 1

等等。行数可以超过一百万。 (请注意,可能存在未定义时区的用户。)有一个 PHP 脚本通过 cron 作业每小时运行一次,并从表中选择一定数量的行。现在是困难的部分。

  1. 每小时从表中选择的行数必须相等。 (选择的数量 = COUNT()/24)
  2. 每一行每天不得选择超过一次(这就是我在表中添加“已选择”列的原因)。
  3. 必须选择本地时间从下午 1 点到下午 5 点的每个用户。
  4. 如果用户的时区未定义,则必须选择下午 5 点到晚上 8 点。
  5. 如果特定时间的用户数量不够,例如时区 +4 的用户数小于 COUNT()/24,可以用未定义的用户或相邻时区的用户来补偿相等性。
  6. 如果在指定时间内有很多用户,可以将他们传递到下一个相邻时区。

我不需要代码,只需要逻辑。如果有人可以提供帮助,我将非常充实。如果有任何问题,我可以详细介绍。

最佳答案

您遇到装箱问题。 “从邻近时区借用”使这变得更加复杂。以下是有关如何解决该问题的一些想法。

这是一种思考解决方案的方法:

  1. 在表中添加一列“使用的时区”(如果需要,您可以重新使用selected)
  2. 在未被选中的用户中,每个时区随机选择一名用户
  3. 将其分配到时区
  4. 如果某个时区没有用户,则查看相邻时区是否有用户
  5. 为每个桶中的第 n 个人再次迭代

哦,这看起来很复杂。似乎还需要一堆游标来解决这个问题。

相反,让我们按时区而不是用户来填充。

  1. 从人口最多的可用时区开始
  2. 从时区中随机选择可用的用户,并将他们的“已使用时区”设置为该时区
  3. 如果没有足够的用户,请转到以前的时区并选择多余的可用用户。
  4. 遍历时区

这越来越近了。您可以通过一次将用户分配到时区来进一步优化它。然后,对于未满的时区,去接其他时区多余的用户。

关于php - 按时区从sql表中排序和选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16468565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com