MYSQL+PHP:数组和循环
从一个用户列表中,我需要根据谁先进来以及我还剩多少分来评分 我在想 获取新用户列表并计算要给予的分数。 把这些分数加到昨天剩下的分数上。 生成旧用户和新用户的列表。 循环浏览用户,根据谁先到给他们每人1分,不超过每人每日积分上限和当天总积分。 现在我已经1-3落后了,但4落后了 完成这件事的最好方法是什么 样本数据: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
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独立于键跟踪数组中条目的顺序
然后可以更新数据库中的用户。如果用户登录两次会怎么样?好问题。系统只让您登录一次。首次登录后的多个登录将被忽略。每次给用户打分时,必须保存该事务的记录。这就是为什么我在寻找一个循环来完成这项工作…你需要生成一个表记录还是写一个日志文件?每次给用户一个点时都会生成一个记录。更新的答案。你需要根据你的表名调整触发器。嗨,安迪!谢谢,但是我已经有了一个保存积分的查询,并记录了积分的去向,所以我不能使用触发器。如果你能帮我解决这个循环问题,我会非常感激。