2015-04-22 53 views
0

我正在開發一個項目,爲學習中心構建評估排行榜。我有一個表,看起來像這樣如何從MySQL表中選擇所有列在日期和列之間的列

enter image description here

我想編寫一個查詢將從該表按類,選擇日期範圍內的所有,每添加個人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和命令的查詢某處,我無法實現我寫的東西。

我知道應該開始使用PDO而不是mysql_query,再次限制知識,並且我的時間不夠了。所有的反饋將不勝感激。 OH,並且得分實際上是一個百分比。

+1

請,[停止使用'mysql_ *'功能](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)。他們不再被維護,並[正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。瞭解[準備的陳述](http://en.wikipedia.org/wiki/Prepared_statement),並使用[PDO](http://jayblanchard.net/demystifying_php_pdo.html)。 –

回答

1

你不需要子查詢,你只需要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 
+0

工作就像一個魅力...輝煌。乾杯 – robkay

0

我覺得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; 
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>';} 
} 
相關問題