用可变列构建学生成绩数据库的最佳方法

时间:2019-07-10 10:28:32

标签: php mysql database relational-database

我正在尝试使用PHP和MYSQL创建一个学生成绩检索系统,来自不同阶段的学生学习不同的科目,所以我不能为所有学生提供一张桌子,而是我对它进行了结构化,因此每个阶段都有自己的桌子但我不知道以这种结构搜索学生的最佳方法是什么。

当前结构是这样的: 第一阶段表格:

CREATE TABLE `first stage` ( `ID` VARCHAR(10) NOT NULL PRIMARY KEY
,`name` VARCHAR(70) NOT NULL 
,`chemistry` VARCHAR(70) NOT NULL 
,`physics` VARCHAR(70) NOT NULL 
,`biology` VARCHAR(70) NOT NULL 
,`avg` VARCHAR(70) NOT NULL )

第二阶段表:

CREATE TABLE `second stage` ( `ID` VARCHAR(10) NOT NULL PRIMARY KEY
,`name` VARCHAR(70) NOT NULL 
,`math` VARCHAR(70) NOT NULL 
,`english` VARCHAR(70) NOT NULL 
,`french` VARCHAR(70) NOT NULL 
,`avg` VARCHAR(70) NOT NULL )

ID列包含一个基于字符串的php随机字符串,该字符串是根据学生姓名和一个随机数作为盐随机生成的,此ID会提供给学生,因此当他/她在一个html形式的php脚本应该从mysql中选择他/她的成绩并显示出来

直到现在我让学生输入ID并选择他/她的阶段:- 假设学生使用$_POST['id'] = 6e34b0f66c$_POST['stage'] = first stage提交表单,则使用mysql查询,如下所示:

select * from `first stage` where ID='6e34b0f66c'

现在我正在尝试消除阶段输入,因此学生仅应输入ID,而php脚本应从所有表中选择并返回正确的结果。

我试图使用并集查询所有表的ID:

select * 
from `first stage` 
where ID='6e34b0f66c' 
union 
select * 
from `second stage` 
where ID='6e34b0f66c'

这可以工作并返回正确的结果,但是它缺少表格名称(即,它仅返回成绩,但我不知道结果来自哪个表格,因此无法向学生显示舞台)。

我还尝试在FROM子句中使用多个表:

select * from `second stage` `first stage` where ID='6e34b0f66c'

但是我发现这只查询FROM子句中的第一个表,而完全忽略了第二个表。

我可能可以在php中进行for循环,以一张一张地搜索表,并在其中一张表中找到结果时停止,但是我认为这样做效率不高,因此首选mysql解决方案。

0 个答案:

没有答案