如何改进这个php mysql代码?

如何改进这个php mysql代码?,php,mysql,Php,Mysql,有了这些代码,我就回想起了一个学生的Rank,这个学生的regd等于$regd。事实上,这是一个工作代码。然而,一位朋友告诉我,在mysql语句中,Distinct和groupby不应该一起使用。但是作为一个新手,我不知道如果不使用Distinct我将如何实现它,因为它不会返回没有Distinct的行。有人能建议我如何改进这些代码吗 <?php mysql_select_db($database_dbconnect, $dbconnect); $query_myrank = "SELEC

有了这些代码,我就回想起了一个学生的
Rank
,这个学生的
regd
等于
$regd
。事实上,这是一个工作代码。然而,一位朋友告诉我,在mysql语句中,
Distinct
groupby
不应该一起使用。但是作为一个新手,我不知道如果不使用
Distinct
我将如何实现它,因为它不会返回没有
Distinct
的行。有人能建议我如何改进这些代码吗

<?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'];
    }
}
?>    
从以下内容开始:

请不要在新代码中使用mysql_*函数。他们正在努力,社区已经开始

相反,您应该学习准备好的语句,并使用或。如果你不能决定,这篇文章

如果您想学习,请从以下内容开始:

请不要在新代码中使用mysql_*函数。他们正在努力,社区已经开始

相反,您应该学习准备好的语句,并使用或。如果你不能决定,这篇文章


如果您想学习,.

Distinct
Group By
慢。您可以这样做,而无需同时使用
groupby
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

Distinct
groupby
慢。您可以这样做,而无需同时使用
groupby
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

我可能想看看我对你的查询格式做了大量编辑,但它太乱了,我可能缩进错了。请看一看,如果需要,请修复它。我可能想看一看,我已经对您的查询格式进行了大量编辑,但它太乱了,我可能缩进错了。请看一看并在必要时修复。虽然这是有效的,但我不会将其视为对他的问题的回答。虽然这是有效的,但我不会将其视为对他的问题的回答。我刚刚在sql fiddle中测试了您的代码,它工作得很好。但是排名行在phpmyadmin中类似于
[BLOB-1B]
,是什么导致了它?我的phpmyadmin有什么问题吗?我可以回应我想要的。你救了我的命。非常感谢。但是我不知道BLOB-01在将来是否会给我带来问题,所以我要问另一个问题。我刚刚用sql fiddle测试了你的代码,它工作得很好。但是排名行在phpmyadmin中类似于
[BLOB-1B]
,是什么导致了它?我的phpmyadmin有什么问题吗?我可以回应我想要的。你救了我的命。非常感谢。但是我不知道BLOB-01在将来是否会给我带来麻烦,所以我会哭着问另一个问题。