学生在mysql中的职位排名

时间:2013-07-05 10:38:45

标签: php mysql

我有一个关于学生排名的项目。样本学校在一年内进行三次终端考试。我为每个终端考试创建了三个不同的表格(即第一个为第一个,第二个是第二个,第三个为第三个第三个)。

表结构如下:

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>";
}

?>

我希望你可以这样帮助我,希望并不复杂。我想添加输出的图片,但它抱怨我没有所需的声誉

2 个答案:

答案 0 :(得分:0)

首先,在数据库中,为总计(“总计”)和(“成绩”)创建一个新列,当您将标记详细信息提交到数据库时,添加标记和成绩,然后将总计提交到数据库,而不是在检索信息时计算它们。

其次,当您从数据库中选择学生时,请使用SQL命令:

SELECT * FROM firsttermsars ORDER BY Total DESC

More info on ORDER BY

这将自动按照总分数的降序返回学生列表。 同样,对于主题排名,您可以有一个单独的表,其中排名是在主题标记上完成的

然后,在检索数据时,

<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