使用php更新mysql自定义排名字段

时间:2019-02-24 21:00:58

标签: php mysql sql

我想找到一种方法来更新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'都移到位置{{1} }至3

6,并找到一种方法来遍历其他人以提高其排名。

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

您可以考虑使用类似以下的内容。

$.each(data, function (i, res) {
    Mydatatable.row.add(res.Id, res.Name.res.Department).draw();                
});

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

答案 2 :(得分:0)

创建一个ID为键,值作为排名的PHP数组,按DESC排名。

$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对其进行排序