我相信,如果你打算把这个系统扩展到包括更多的信息,那么,你可以从返工你的数据库中受益,我将建立它像这样:
表名 =粗体
列名 =斜体
学生:
测试:
个
测试成绩
- GID(主键)
- TID(外键)
- SID(外键)
- 级
这个结构是基于一个叫做数据库正常化的想法(如果你是谷歌的话,你会得到很多信息)。我将在下面给你一个部分总结,但是如果你打算做很多SQL,你应该自己阅读:
首先要知道的是主键只是一个唯一的标识符,它是通常不是信息的一部分(但是,因为它是唯一的,所以每个数据必须具有不同的主键值),并且外键是从另一个表中的一行中引用一行中的行的方式,使用参考者的主键:例如这里的外键SID在每个年级引用单个学生,根据他们的主键SID。
例如学生有SID 1,他的所有测试在SID列中有1个。对于学生2,3,4等等同样如此。
规范化的基本思想是,所有的唯一数据只存储一次,然后在其他使用它的地方引用(如果你看看例子中键的结构,所有的学生信息都被存储在表中,然后参考他们的测试成绩,而不是在每个年级重复)。
要获取你想要的东西从这些表中我会用这个(它用PHP编写的):
$sql = 'SELECT * FROM Tests ORDER BY TID';
$tempresult = mysql_query($sql);
while($temprow = mysql_fetch_array($tempresult)){
echo $temprow['TID'];
}
$sql = 'SELECT * FROM Students';
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)){
echo '\n'.$row['SID'];
$sql = 'SELECT * FROM Grades WHERE SID='.$row['SID'].' ORDER BY TID';
$result2 = mysql_query($sql);
while($row2 = mysql_fetch_array($result2)){
echo ' '.$rows['Grade'];
}
}
您可以在echo语句格式添加到这一点,并同时打印任你选择的额外信息加上。如果您有任何问题,请询问他们。
编辑:我已阅读其他人,并同意他们的方法在所有可能优于,我唯一不知道的是,数据透视表是否可以扩展以处理不同数量的测试,如果它可以(或者你不需要),那么我建议他们的方法,否则我觉得这可能在你的应用程序中有一席之地。
使用“代码”按钮进行格式化可让您使用固定宽度的字体,帮助将这些表格排成一列并更具可读性 – ford 2010-08-31 17:29:08