使用PHP更新MySQL自定义排名字段。

3
我希望找到一种方法来更新MySQL中的自定义排名字段,以便它会相应地重新编号所有其他项。
示例数据:
ID     Name    Ranking
12     Sara    1
13     Mike    2
14     John    3
15     Susie   4
16     Melissa 5
17     Jane    6

如果我通过PHP将'Jane'更新为排名2,我希望从'Mike''Melissa'的所有人都被移动到位置36
使用Set Ranking=2 where ID=17,并找到一种循环方式来增加其余人员的排名。
3个回答

2
最初的回答:你可以尝试像这样做:

你可以尝试类似这样的方法

if($curSort > $setSort){
    // "UPDATE table SET Ranking = (Ranking + 1) WHERE Ranking >= $setSort AND Ranking < $curSort"
} elseif($curSort < $setSort){
    // "UPDATE table SET Ranking = (Ranking - 1) WHERE Ranking > $curSort AND Ranking <= $setSort"
}
///update $curSort to $setSort 
<最初的回答> 在这里,$curSort等于6,$setSort等于2。

0
你可以考虑使用类似以下的代码。
SET @val = 0;

UPDATE table_name SET Ranking = (@val:=@val+1) ORDER BY column_name;

在这里,您将按照正在排序的列进行排序,例如,如果您有一个包含总分的列,并且您要按照分数降序排列,则会相应地更新排名。


0
创建一个 PHP 数组,使用 id 作为键,排名作为值,并按照排名倒序排序。
$ranking = array(12 => 1, 13 => 2, 14 => 3, 15 => 4, 16 => 5, 17 => 6); //array described above

$new_rank_id_user = 17; //id of the user you want to change the rank
$new_rank_user = 2; //new rank of this user 

foreach ($ranking as $id_user => $rank_user) { //loop over all users
    if ($rank_user >= $new_rank_user) { //if the current user needs to go down
        $ranking[$id_user] = $rank_user + 1; 
    }
}

$ranking[17] = 2; //finally place this user at the good place

现在你可以使用一个数组进行循环,以获取每个元素的id和新排名。

如果需要,你也可以使用asort($ranking)按排名对数组进行排序,或者使用ksort($ranking)按id排序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接