如何 select all from MySQL table where column between dates and order by column

How to select all from MySQL table where column between dates and order by column

我正在从事一个为学习中心建立评估排行榜的项目。我有一个 table 看起来像这样

我正在尝试编写一个查询,它将 select 全部来自 table CLASS,在 DATE 范围内,添加每个人的分数 STUDENT_ID 然后订购按添加的分数降序创建排行榜。我已经阅读了一些关于子查询的内容,但不太了解示例或它们的工作原理,我还认为我的查询中需要 SELECT DISTINCT student_id 但我的知识也是有限,因为我只用过一次。

无论如何,这就是我目前所拥有的。

$classcheck = mysql_query("SELECT * 
                           FROM assessment 
                           WHERE class = '$class_info' 
                           order by score DESC") 
            or die(mysql_error());  

if(mysql_num_rows($classcheck) > 0){ 
    while($row = mysql_fetch_array($classcheck)){ 
        if(strtotime($row["date"]) > strtotime($fromdate) && strtotime($row["date"]) < strtotime($todate)){
            echo $row['score'].'<p>';
        }
    }
}

但我需要它来添加 SCORE 并在查询中按添加的 SCORE 进行排序,这是我无法用我所写的内容实现的。

我知道应该开始使用 PDO 而不是 mysql_query,知识又有限,我 运行 没时间了。所有反馈将不胜感激。哦,分数真的是百分比。

您不需要子查询,您只需要 SUMGROUP BY 来按学生计算总分,以及 WHERE 子句来限制日期。

SELECT student_name, SUM(score) AS total_score
FROM assessment
WHERE date BETWEEN '$fromdate' AND '$todate' 
    AND class = '$class_info'
GROUP BY student_id
ORDER BY total_score DESC

我认为 GROUP BY 可能会成功,因为您正在尝试将一个人 STUDENT_ID 的所有分数相加。

如果我错了,请随时纠正我,但以下 SQL 应该能满足您的需求。

SELECT SUM(score) AS ttl_score, student_name 
FROM assessment 
WHERE class='$class_info' 
AND date>='$start' AND date<='$end' 
GROUP BY student_id ORDER BY ttl_score DESC;
$classcheck = mysql_query("Select Student_id, sum(Score) as SummedScore from      assessment where class='$class_info' and
date between '$fromdate' and '$todate' Group by Student_ID Order By SummedScore"
or die(mysql_error());

if(mysql_num_rows($classcheck) > 0){ 

 while($row = mysql_fetch_array($classcheck)){ 
     echo $row['SummedScore'].'<p>';}
}