2013-07-25 24 views
1

使用這些代碼我回復Rank的學生,其regd等於$regd。實際上,這是一個工作代碼。不過,我被朋友告知,在mysql語句中DistinctGroup By不應該一起使用。但作爲新手,我無法弄清楚如何在不使用Distinct的情況下實現它,因爲它不會返回沒有Distinct的行。任何人都可以建議我如何改進這些代碼?如何提高這個php的mysql代碼?

<?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']; 
    } 
} 
?>  
+2

可能要看一看[codereview.stackexchange.com(http://codereview.stackexchange.com) –

+1

我大量編輯您的查詢格式,但它是如此凌亂,我可能有縮進它錯了。請仔細閱讀並在必要時修復此問題 –

+0

@STU LCU謝謝 –

回答

1

DistinctGroup By慢。你可以這樣做,不需要同時使用Group ByDistinct,這可能是你想要實現的。

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 
+0

我剛剛在sql小提琴中測試了你的代碼,它工作得很好。但是排名行像phpmyadmin中的[BLOB - 1B]',可能導致了這種情況?我的phpmyadmin有什麼問題嗎? –

+1

我可以迴應我想要的。你拯救了我的生命。謝謝。但我不知道BLOB-01將來是否會引起我的問​​題,所以我就此問了另一個問題。 –