Php 如何使用sql密集排序函数更新数据库表

Php 如何使用sql密集排序函数更新数据库表,php,mysql,Php,Mysql,我的项目中有这个代码 if($run_query == true){ $i = 1; $query1 = "SELECT * FROM `scores` WHERE `subjects` = '{$result_subject}' AND `class` = '{$student_class}' AND `term` = '{$result_term}' AND `session` = '{$result_session}' ORDER BY `tot

我的项目中有这个代码

if($run_query == true){

        $i = 1;
        $query1 = "SELECT * FROM `scores` WHERE `subjects` = '{$result_subject}' AND `class` = '{$student_class}' AND `term` = '{$result_term}' AND `session` = '{$result_session}' ORDER BY `total` DESC ";
        $run_query1 = mysqli_query($connection, $query1);
        

            while($outputs = mysqli_fetch_assoc($run_query1)){
                
                $subject_t = $outputs['total'];
                
                
                $sql = "UPDATE score SET position = '{$i}' WHERE total = '{$subject_t}'";
                $run_query2 = mysqli_query($connection, $sql);
                $i++;
                
            }
这里的问题是更新查询使用1、2、3、4、5、6等更新位置列,并且不遵守密集排序函数。请帮忙


使用DISTINCT获取主题的唯一总值,然后使用它更新排名

    $query1 = "SELECT DISTINCT(`total`) FROM `scores` WHERE `subjects` = '{$result_subject}' AND `class` = '{$student_class}' AND `term` = '{$result_term}' AND `session` = '{$result_session}' ORDER BY `total` DESC ";


$items = array();
while($outputs = mysqli_fetch_assoc($run_query1)){
    $items[] = $outputs['total'];
}

// Note: table name is scores 
foreach ($items as $key => $total) {
      $sql = "UPDATE scores SET position = ".($key+1)." WHERE total = ".$total;
      $run_query2 = mysqli_query($connection, $sql);
}

您需要在select查询中使用DENSE_RANK()OVER(按总计划分顺序按总计描述)作为秩,然后根据$outputs['RANK']更新位置,因为您正在更新基于$i的位置,它一定是从1到loop endWarning的增量值:您完全可以使用参数化的准备语句,而不是手动构建查询。它们由或提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行。好的,这是一种方法,但是这个问题是用sql密集排序函数特别提出的,谢谢您的及时回复。代码对分数进行了排序。第一个最高的数字是90和90,代码显示为2,2而不是1,1,然后跳过了3。等等,对不起,我在执行代码时犯了一个错误。它工作得很好。谢谢