如何从MySQL表中选择所有日期之间的列和按列排序

时间:2015-04-22 20:08:36

标签: php mysql pdo

我正在开展一个项目,为学习中心建立评估领导委员会。我有一张看起来像这样的桌子

enter image description here

我正在尝试编写一个查询,它将从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,知识再次受限,而且我的时间已经不多了。所有反馈将不胜感激。 OH,分数确实是一个百分比。

3 个答案:

答案 0 :(得分:1)

您不需要子查询,只需要public class FirstType { public int A {get; set;} public int B {get; set;} } public class SecoundType : FirstType { public int C {get; set;} } public class BaseClass { public virtual IQueryable<FirstType> GetQuery() { return db.Car.Select(v => new FirstType() { A = v.Column1, B = v.Column2 }); } } public class DerivedClass : BaseClass { public override IQueryable<FirstType> GetQuery() { // Here, I get the first query with the base result. var query1 = base.GetQuery(); var query2 = db.Car.Select(v => new SecoundType() { A = v.Column1, B = v.Column2, C = v.Column3 }); // The error occur here. return query1.Union(query2); } } SUM按学生计算得分,并使用GROUP BY子句来限制日期。

WHERE

答案 1 :(得分:0)

我认为git check-last-change --dir=app/styles/ 可能会解决这个问题,因为你试图将个人STUDENT_ID的所有分数相加。

如果我错了,请随时纠正我,但下面的SQL应该可以帮到你找到你想要的东西。

GROUP BY

答案 2 :(得分:0)

$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>';}
}