有一些课程。课堂上的学生学习科目。我将这些表连接到每个表格上:对于1个班级,将有许多科目,对于1个科目,将有许多班级。 Subject M <=> M Class
。所以我的数据库中有3个表来创建这些关系:
主题:
+----+------+
+ id + name +
+----+------+
类别:
+----+-------+------+
+ id + digit + char +
+----+-------+------+
ClassVsTeacher(连接这两个表):
+----+----------+------------+
+ id + class_id + subject_id +
+----+----------+------------+
TeacherVsClass(对于第二个问题很重要,连接班级和老师):
+----+----------+------------+
+ id + class_id + teacher_id +
+----+----------+------------+
1)我是对的吗?
2)我正在努力将主题添加到课堂上。 我想在下拉列表中显示至少有1名教师,但当前班级已经连接的科目除外。
我知道如何展示至少有一位老师的所有科目:
select
`s`.`id`, `s`.`name`
from `Subject` as `s`
where
`s`.`id` in (select `subject_id` from `TeacherVsSubject`)
它工作正常,但我无法理解如何显示这个,除了已经连接到当前类的主题。这是我的问题。
答案 0 :(得分:0)
我认为你走在正确的轨道上。
我使用的表名如下:
SubjectsPerClass
和
TeachersPerClass
然后我创建一个join语句并将其保存为视图,然后从现在开始查询视图
SELECT *
FROM `SubjectsPerClass` sc
JOIN `Subject` s
ON `s`.`id` = `sc`.`subject_id`
JOIN `Class` c
ON `c`.`id` = `sc`.`class_id`
然后,如果您使用的是phpMyAdmin,请点击最后的Create View
。我通常将视图命名为ClassesInfo
(我使用Info
作为视图)。您可以选择选择所需的字段。
然后将来你可以做
SELECT *
FROM `ClassesInfo`
WHERE (conditions here)
答案 1 :(得分:0)
解决方案:
select * from Subject
where id in (select subject_id from TeacherVsSubject)
and id not in (select subject_id from ClassVsSubject where class_id = XX)
我们选择所有主题,如果id
中有相同TeacherVsSubject
行,且ClassVsSubject中没有任何行id
且该类= XX
。 XX
= id
类,我将为其添加主题。