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 ByGroup Byと を一緒に使用しなくても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_* 関数を使用しないでください。それらはもはや保守されておらず、コミュニティは非推奨プロセスを開始しています

代わりに、準備済みステートメントについて学び、PDOまたはMySQLiのいずれかを使用する必要があります。決められない場合は、この記事を参考にしてください。

学習したい場合は、ここに良い PDO チュートリアルがあります。

于 2013-07-25T13:27:54.757 に答える