Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL+PHP:数组和循环_Php_Mysql - Fatal编程技术网

MYSQL+PHP:数组和循环

MYSQL+PHP:数组和循环,php,mysql,Php,Mysql,从一个用户列表中,我需要根据谁先进来以及我还剩多少分来评分 我在想 获取新用户列表并计算要给予的分数。 把这些分数加到昨天剩下的分数上。 生成旧用户和新用户的列表。 循环浏览用户,根据谁先到给他们每人1分,不超过每人每日积分上限和当天总积分。 现在我已经1-3落后了,但4落后了 完成这件事的最好方法是什么 样本数据: UserId | Points | Date In 1 | 3 | 2014-09-22 12:00:00 2 | 2 | 2014

从一个用户列表中,我需要根据谁先进来以及我还剩多少分来评分

我在想

获取新用户列表并计算要给予的分数。 把这些分数加到昨天剩下的分数上。 生成旧用户和新用户的列表。 循环浏览用户,根据谁先到给他们每人1分,不超过每人每日积分上限和当天总积分。 现在我已经1-3落后了,但4落后了

完成这件事的最好方法是什么

样本数据:

UserId | Points | Date In
   1   |   3    |   2014-09-22 12:00:00
   2   |   2    |   2014-09-22 12:00:02
   3   |   1    |   2014-09-22 01:10:05
如您所见,userid1首先登录,他得到1分。当userid2登录时,userid1得到另一个点,userid2得到一个点。当userid3登录时,userid1得到另一个点,userid2和userid3也得到另一个点。这会一直持续到用户达到每日上限,或者没有更多的分数可以给

如果能得到任何帮助,我将不胜感激

谢谢

编辑:我想去的地方的示例:

伪代码:

WHILE points <= 0 {
DO {
list users and distribute points to users by cycling through each one
} WHILE dailypointscap <=10
**若用户的dailypointscap在点达到0之前达到10点,则将用户从列表中删除,然后再次在列表中循环


我希望我在这里讲得有道理……

您已经获得了符合数据库积分条件的用户ID列表,按登录日期排序。假设每个用户都存储在这样的数组中

$users = [
    ['id' => 1, 'points' => 0],
    ['id' => 4, 'points' => 0],
    ['id' => 8, 'points' => 0],
    ['id' => 2, 'points' => 0],
];
对于$points中的剩余点,您可以迭代用户以更新新点:

$total = 20;
$assigned = [];
do {
    foreach($users as $user) {
        if (!array_key_exists($user['id'], $assigned)) {
            $assigned[$user['id']] = 0;
        }
        foreach($assigned as $id => $points) {
            if($points < 10) {
                $assigned[$id]++;
                $total--;
            }
            if ($total == 0) {
                break;
            }
        }
    }
} while ($points > 0);
这是因为PHP独立于键跟踪数组中条目的顺序


然后可以更新数据库中的用户。

如果用户登录两次会怎么样?好问题。系统只让您登录一次。首次登录后的多个登录将被忽略。每次给用户打分时,必须保存该事务的记录。这就是为什么我在寻找一个循环来完成这项工作…你需要生成一个表记录还是写一个日志文件?每次给用户一个点时都会生成一个记录。更新的答案。你需要根据你的表名调整触发器。嗨,安迪!谢谢,但是我已经有了一个保存积分的查询,并记录了积分的去向,所以我不能使用触发器。如果你能帮我解决这个循环问题,我会非常感激。