如何改进这个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在将来是否会给我带来麻烦,所以我会哭着问另一个问题。