根据展示位置在排名表上移动用户

时间:2017-08-30 10:14:37

标签: php mysql laravel logic

代码基于我前一个问题的Lvkz posted,它解决了我遇到的更大问题。但是,我需要帮助找到一种方法来避免重复和错误的数字序列。

$winner_ranking = $winner->getRankings()->where('ranklist_id', $ranklist_id)->first();
$loser_ranking = $loser->getRankings()->where('ranklist_id', $ranklist_id)->first();

if ($winner_ranking->placement > $loser_ranking->placement) {
    $rankings = ClubRanking::where('placement', '>', $loser_ranking->placement)
        ->where('ranklist_id', '=', $ranklist_id)
        ->increment('placement', 2);

    $winner_ranking->placement = $loser_ranking->placement;
    $winner_ranking->save();

    $loser_ranking->placement = $loser_ranking->placement + 1;
    $loser_ranking->save();
}

用户A =展示位置:1

用户B =展示位置:2

如果用户B 胜过用户A ,则数字序列将如下所示

  

用户B =展示位置:1

     

用户A =展示位置:2

     

用户C =展示位置:4

     

用户D =展示位置:5

     

用户E =展示位置:6

同样是快速记录,问题仍然仍然存在,但如果我将增量更改为1而不是2,则以不同的方式

1 个答案:

答案 0 :(得分:1)

这还没有经过测试,但如果我明白你的意思,它应该给你想要的东西:

if ($winner_ranking->placement > $loser_ranking->placement) {

    $rankings = ClubRanking::whereBetween('placement', [$loser_ranking->placement, $winner_ranking->placement])
        ->where('id', '!=', $winner_ranking->id)
        ->where('ranklist_id', '=', $ranklist_id)
        ->increment('placement');

    $winner_ranking->placement = $loser_ranking->placement;
    $winner_ranking->save();

}

希望这有帮助!