使用来自4个表(不是所有直接链接)的信息的SQL查询

时间:2010-04-08 13:07:44

标签: mysql join

我正在开发一个简单的课堂系统,教师可以在这里管理课程及其科目。

我的教师表中有两个级别的访问权限,由一个整数分配(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与校长教室相关的所有科目:)

2 个答案:

答案 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 ...

这将包括所有教师记录,即使他们的教师没有出现在教师课程表中。 (老实说,我可能会倒退 - 你可能想做一个“左外”而不是 - 我永远不会记得哪一个,所以我尝试一种方式,如果我不喜欢结果,我会尝试另一个看看是否有所改善的方向。)

希望有所帮助!