我正在开发一个简单的课堂系统,教师可以在这里管理课程及其科目。
我的教师表中有两个级别的访问权限,由一个整数分配(1 = admin,2 = user)...这意味着校长是管理员:)
教师(1级)可以有很多班级,班级可以有很多教师(所以我有'TeachersClasses'表)。一堂课可以有很多科目,老师可以有很多科目。
基本上,我正在尝试查询以显示管理员教师(1级)科目。但是,只有级别为2的教师才与主题直接相关,该主题由管理员用户设置。校长可以通过教室查看他们所有的科目,但我不能让所有科目都显示在一个页面上,而是我现在只能让科目出现在特定的教室下面......
这是我到目前为止所做的,它什么也没有返回。 (我猜这可能需要一个更先进的SQL子句'INNER JOIN',这是我熟悉的唯一连接类型,并认为这就足够了!
$query = "SELECT subjects.subjectid, subjects.subjectname,
subjects.subjectdetails, classroom.classid, classroom.classname
FROM subjects INNER JOIN classroom ON subjects.subjectid = classroom.classid
INNER JOIN teacherclasses ON classroom.classid = teacherclasses.classid
INNER JOIN teachers ON teacherclasses.teacherid = teachers.teacherid
WHERE teachers.teacherid = '".intval( $_SESSION['SESS_TEACHERID'] )."'";
为了显示与校长班级相关的所有科目,我收集说我的所有表格都需要在这里调出?谢谢你的帮助!
示例输出:
主题名称:数学// 老师:史密斯先生// 教室:DG99
x10与校长教室相关的所有科目:)
答案 0 :(得分:0)
这一行看起来像一个错误:
INNER JOIN classroom ON subjects.subjectid = classroom.classid
加入带有classid的subjectid时,你不会得到任何记录。
答案 1 :(得分:0)
基于表的名称(使用DDL来显示表结构会使这更清晰),我猜测主题和课堂之间的连接是无效的。你真的想把subjectid加入课堂id吗?
另外,我不确定整个level1和level2是如何相关的(同样,DDL可能会帮助读者理解),但是你所谈论的高级内部联接可能是一个外部联接。如果您想要包含教师,即使他们没有教师课程记录,您也可以进行外部联接:
... teacherclasses ON classroom.classid = teacherclasses.classid 右外连接教师ON teacherclasses.teacherid = teachers.teacherid ...
这将包括所有教师记录,即使他们的教师没有出现在教师课程表中。 (老实说,我可能会倒退 - 你可能想做一个“左外”而不是 - 我永远不会记得哪一个,所以我尝试一种方式,如果我不喜欢结果,我会尝试另一个看看是否有所改善的方向。)
希望有所帮助!