我想找到一种方法来更新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
,并找到一种方法来遍历其他人以提高其排名。
答案 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对其进行排序