有没有办法可以使用sub_name而不是sub_id?
这是我的代码..
echo "<table border=1 align=center><tr class=style2><td>Date<td>Student Name <td> Subject <td> Score";
$sortQuery = mysql_query("select * from mst_adminresult",$cn) or die(mysql_error());
while($row=mysql_fetch_row($sortQuery))
{
echo "<tr class=style8><td>$row[5]<td>$row[1] <td align=center> $row[4] <td align=center> $row[3]/20";
}
echo "</table>";
此代码显示所有考试的结果。在Subject
中,它的输出是主题ID。我只是想知道是否有任何办法可以得到它的主题名称。主题名称在不同的表格中。
adminresult_tbl
CREATE TABLE `mst_adminresult` (
`adminResultID` int(5) NOT NULL,
`login` varchar(20) NOT NULL,
`test_id` varchar(20) NOT NULL,
`score` int(3) NOT NULL,
`test_date` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
subjecet_tbl
CREATE TABLE `mst_subject` (
`sub_id` int(5) NOT NULL,
`sub_name` varchar(25) DEFAULT NULL,
`sub_desc` text
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
test_tbl
CREATE TABLE `mst_test` (
`test_id` int(5) NOT NULL,
`sub_id` int(5) DEFAULT NULL,
`test_name` varchar(30) DEFAULT NULL,
`total_que` varchar(15) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
程序的流程是,当用户参加考试时,用户将被重定向到列出所有科目的页面,然后用户将选择她想要的科目,之后,列表测试将显示,然后用户将再次选择,那时用户可以进行测验。
在主题列表中,我调用了subject_tbl
。在测试列表中,test_tbl
。当用户完成考试后,它将存储在adminresult_tbl
答案 0 :(得分:0)
加入3个表格。试试这个:
SELECT * FROM mst_adminresult m
JOIN test_tbl t ON t.test_id = m.test_id
JOIN subject_tbl s ON s.sub_id = t.sub_id;
答案 1 :(得分:0)
正如@PrinceG所描述的,您可以使用JOIN syntax来读取其他表中的值。为了保持编码的格式,SQL语句应该是这样的:
SELECT ar.*, s.sub_name
FROM mst_adminresult AS ar
LEFT JOIN mst_test AS t ON t.test_id = ar.test_id
LEFT JOIN mst_subject AS s ON s.sub_id = t.sub_id;
这样做可以让您通过$row[6]
访问主题的名称。
但是,请注意,您的数据库建模风险很大:
mst_subject
和mst_test
)表格中指定任何primary key。如果不仔细处理,这可能会导致严重的数据不一致。出于好的理由,引入主键是一个非常好的习惯 - 例如,请参阅http://www.mysqltutorial.org/mysql-primary-key/ test_id
中mst_adminresult
为mst_test
,而LEFT JOIN
中没有相应的记录。由于上面的语句使用NULL
s,这不会抑制返回的结果集中的记录,但PHP中会显示mst_adminresult
值。但是,我怀疑这是故意的。相反,我认为这是一种更好的方法,在将mst_test
中的记录插入到目前为止mst_subject
中没有提供测试时,DB会引发错误。
对于mst_test
。onSubmit(value: any): void {
form.controls.forEach((name, control) => {
control.updateValue('');
control.setErrors(null);
});
}
总而言之,您可能会在ER Modeling感兴趣的文章中找到类似的文章。