1

使用这些代码,我回显了一个等于Rank的学生。事实上,这是一个工作代码。但是,有朋友建议我在mysql语句中不应该一起使用。但是作为一个新手,我不知道如何在不使用的情况下实现它,因为它不会返回没有. 谁能建议我如何改进这些代码?regd$regdDistinctGroup ByDistinctDistinct

<?php 
mysql_select_db($database_dbconnect, $dbconnect);
$query_myrank = "SELECT Distinct regd, Name_of_exam, 
                        Name_of_Student, TOTALSCORE, Rank 
                 FROM (SELECT *, IF(@marks = (@marks := TOTALSCORE), 
                              @auto, @auto := @auto + 1) AS Rank 
                       FROM (SELECT Name_of_Student, regd, 
                                   Name_of_exam, SUM(Mark_score) AS TOTALSCORE 
                             FROM cixexam, (SELECT @auto := 0, 
                                                   @marks := 0) AS init 
                                            GROUP BY regd 
                             ORDER BY TOTALSCORE DESC) t) AS result 
                 HAVING (Name_of_exam='First Terminal Exam' OR 
                         Name_of_exam='First Term Test')";

$myrank = mysql_query($query_myrank, $dbconnect) or die(mysql_error());

$i = 0;
$j = 0;
$data = array();
while($row_myrank = mysql_fetch_assoc($myrank))
{
    $data[$i] = $row_myrank;
    if(isset($data[$i - 1]) 
           && $data[$i - 1]['TOTALSCORE'] == $data[$i]['TOTALSCORE'])
    {
       $data[$i]['Rank'] = $j;
    }else{
       $data[$i]['Rank'] = ++$j;
    }
       $i++;
}
foreach($data as $key => $value)
{
    if($value['regd'] == $regd)
    {
        echo $value['Rank'];
    }
}
?>    
4

2 回答 2

1

Distinct比 慢Group By。您可以在不使用Group Byand的情况下Distinct这样做,这可能是您想要实现的目标。

SELECT regd, Roll_no, Name_of_Student, Name_of_exam,
       TOTALSCORE, Rank 
FROM 
(
  SELECT t.*, IF(@p = TOTALSCORE, @n, @n := @n + 1) AS Rank, @p := TOTALSCORE 
    FROM
  (
    SELECT regd, Roll_no, Name_of_Student, Name_of_exam, 
            SUM(Mark_score) TOTALSCORE
    FROM cixexam, (SELECT @n := 0, @p := 0) n 
     WHERE (Name_of_exam='First Terminal Exam' OR Name_of_exam='First Term Test')
     GROUP BY regd 
     ORDER BY TOTALSCORE DESC
  ) t
) r
于 2013-07-25T17:10:23.227 回答
0

从这个开始:

请不要将 mysql_* 函数用于新代码。它们不再被维护并且社区已经开始了弃用过程

相反,您应该了解准备好的语句并使用PDOMySQLi。如果你不能决定,这篇文章将有助于选择

如果你想学习,这里有很好的 PDO 教程

于 2013-07-25T13:27:54.757 回答