С этими кодами I echo Rank
студент, чей regd
равен $regd
. Фактически, это рабочий код. Тем не менее, мне посоветовал друг, что в mysql заявление Distinct
и Group 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'];
}
}
?>
Может хотите взглянуть на [codereview.stackexchange.com] (http://codereview.stackexchange.com) –
Я сильно изменяли форматирование запросов, но это было так грязно, что я мог бы сбиты с ног. Пожалуйста, взгляните на него и исправьте его, если необходимо –
@STT LCU спасибо –