我有一个关于学生排名的项目。样本学校在一年内进行三次终端考试。我为每个终端考试创建了三个不同的表格(即第一个为第一个,第二个是第二个,第三个为第三个第三个)。
id studentid matca1 matca2 matexam engca1 engca2 engexam
1 2 15 14 40 12 10 60
2 1 10 5 56 9 13 35
3 4 11 9 45 14 17 40
4 5 14 1 50 20 0 60
id为4和5的学生在class1,而2和1的学生在class2。我有一个单独的课程表,也有学生档案信息的单独表格。
现在,我已经输出了结果单但没有看起来像这样的等级
StudentId: 2 Full Name: Fawaz James Class: Pry 2 Overall Position: -
1stAss 2ndAss ExamScore Grade Position Rmks
Mark Obtainable 20 20 60
English 12 10 60 A - Excellent
Mathematics 15 14 40 B - V. Good
虽然我是首发,但我的代码很乱,它在下面提供。此外,我需要帮助计算课堂上的整体职位和课堂上的学科位置。请帮助我,因为我的项目依赖于此项以获得批准,并且在我介绍堆栈溢出之前的最后一周。
$query = "SELECT * FROM firsttermsars
WHERE studentID=$stuID AND year=\"$_SESSION[year]\""; #27
$result = mysql_query($query)
or die ("Couldn't execute query.");
while ($row = mysql_fetch_array($result,MYSQL_ASSOC))
{
echo "<h2> First Term Stint Report Sheet for $namet during the SESSION $year</h2>";
echo "<table class='table1'>";
echo "<tr>";
echo "<td></td>";
echo "<td><b>1st Assessment</b></td><td><b>2nd Assessment</b></td>
<td><b>Mid Term<br />Exam</b></td><td><b>Mid Term<br />Total Score</b></td><td><b>Grade<br />Point</b></td></tr>";
echo "<tr> <td><b>Mark Obtainable</b></td><td><b>30</b></td><td><b>20</b></td><td><b>50</b></td><td><b>100</b></td><td><b>||=||</b></td></tr><tr>";
$tetal = $row['thirdengtest']+$row['thirdengexam']+$row['eng1'];
if ($tetal >="1") {
$q2 = "1";
$sq2 = "100";
echo "<td>English Language: </td>";
echo "<td>{$row['eng1']}</td><td>{$row['thirdengtest']}</td><td>{$row['thirdengexam']}</td> <td>";
$total1 = $row['thirdengtest']+$row['thirdengexam']+$row['eng1'];
echo $total1."</td><td>";
if ($total1>="75")
echo "A1";
elseif ($total1>="70")
echo "B2";
elseif ($total1>="65")
echo "B3";
elseif ($total1>="60")
echo "C4";
elseif ($total1>="55")
echo "C5";
elseif ($total1>="50")
echo "C6";
elseif ($total1>="45")
echo "D7";
elseif ($total1>="40")
echo "E8";
elseif ($total1>="1")
echo "F9";
elseif ($total1=="0")
echo "-";
else
echo "F";
echo "</td></tr>";
}
$tetal = $row['thirdmathtest']+$row['thirdmathexam']+$row['math1'];
if ($tetal >="1") {
$q3 = "1";
$sq3 = "100";
echo "<tr>";
echo "<td>Mathematics </td>";
echo "<td>{$row['math1']}</td><td>{$row['thirdmathtest']}</td> <td>{$row['thirdmathexam']}</td> <td>";
$total2 = $row['thirdmathtest']+$row['thirdmathexam']+$row['math1'];
echo $total2."</td><td>";
if ($total2>="75") echo "A1"; elseif ($total2>="70") echo "B2"; elseif ($total2>="65") echo "B3"; elseif ($total2>="60") echo "C4"; elseif ($total2>="55") echo "C5"; elseif ($total2>="50") echo "C6"; elseif ($total2>="45") echo "D7"; elseif ($total2>="40") echo "E8"; elseif ($total2>="1") echo "F9"; elseif ($total2=="0") echo "-"; else echo "F";
echo "</td></tr>";
}
?>
我希望你可以这样帮助我,希望并不复杂。我想添加输出的图片,但它抱怨我没有所需的声誉
答案 0 :(得分:0)
首先,在数据库中,为总计(“总计”)和(“成绩”)创建一个新列,当您将标记详细信息提交到数据库时,添加标记和成绩,然后将总计提交到数据库,而不是在检索信息时计算它们。
其次,当您从数据库中选择学生时,请使用SQL命令:
SELECT * FROM firsttermsars ORDER BY Total DESC
这将自动按照总分数的降序返回学生列表。 同样,对于主题排名,您可以有一个单独的表,其中排名是在主题标记上完成的
然后,在检索数据时,
<table>
<?php
while ($i<$num) //num is number of rows
{
?>
<tr><td><?php echo mysql_result($result,$i,"Name"); ?></td>
//... Similarly for all clumns
<?php
}
?>
</table>
这应该使所有学生的表格根据他们的总分数排名。同样,您可以根据主题标记制作表格。
这就是我如何解决问题。希望我帮忙!
答案 1 :(得分:0)
虽然我迟到了,但它可能对某人有所帮助。 首先,您应该计算获得的标记并存储在数据库表中。 为简单起见,我只展示了3列。
Id Name Obtained
1 A 100
2 B 58
3 L 88
4 F 102
5 C 99
在表格中插入行,然后运行此查询以获取学生的位置。
SELECT id, name, Obtained, FIND_IN_SET( score, (
SELECT GROUP_CONCAT( score
ORDER BY score DESC )
FROM scores )
) AS position
FROM scores
WHERE id = 5
详情https://dba.stackexchange.com/questions/13703/get-the-rank-of-a-user-in-a-score-table