我已经挂断了 php 中根据他们的表现将我的用户分配到“联盟”所需的逻辑。基本上,每月一次,我将运行一个 cron 作业,它将获取我的用户列表及其平均数据,如下所示
SELECT user_id, AVG(activity_value) AS `average`
FROM usermeta
WHERE activity_date >= DATE_ADD(CURDATE(), INTERVAL -7 DAY)
GROUP BY user_id
ORDER BY average DESC
这将返回我的用户列表和他们的平均值,这将决定他们在联赛中的位置(最好的用户在顶部)。
我有一个联赛表,它像这样简单地存储联赛 ID 及其名称
league_id league_name
1 Gold
2 Silver
3 Bronze
然后我有一个关系表,将用户和排名表联系在一起,一旦我确定了逻辑,它(应该)看起来像这样
user_id league_id
2 1
3 1
1 2
6 2
5 3
4 3
ETC...
我被挂断的地方是将用户插入正确的联赛所需的逻辑。也有可能有更多的联赛。例如,如果有 36 个用户和 4 个联赛,则每个联赛应该有 9 个用户。
到目前为止,我的 cron 工作是在执行时运行它(只是为了让您了解我的进度)
protected function execute() {
$leagues = $this->app['leagues'];
$userAvgs = $leagues->getAllUserAvgs(); // holds results from query shown above
foreach($userAvgs as $user) {
$league = new League(array(
'user_id' => $user['user_id'],
'league_id' => THE_CORRECT_LEAGUE_HERE
));
$leagues->save($league);
}
}
在 foreach 的每个循环中,它应该将用户及其适当的联赛存储到关系表中,但我只是迷失了如何运行它并确定我需要为用户league_id 插入的正确联赛。我想我需要每个联赛都有正确的用户数,这可能是
$usersPerLeague = count($userAvgs)/count($leagues->getAllLeagues());
// getAllLeagues method returns a list of my leagues obviously
如果有人能在这个过程中引导我朝着正确的方向前进,我将不胜感激。