作为学校ERP系统的一部分,我有一个包含中心所有课程的表格,将每个班级(cl_id
)与特定课程(cl_fk_co_id
)和教师联系起来(cl_fk_te_id
)。如您所见,教师可以与具有相同课程的几个班级相关(例如:教师ID 3与两个班级(ID 39和ID 42)中的课程ID 302相关:
现在我需要选择这位老师给出的所有课程,并用WHILE列出。在这里您有查询:
$selectCoursesFilter = select("SELECT * FROM class_conf JOIN course_conf ON co_id=cl_fk_co_id WHERE cl_fk_te_id='3'");
while($registroCourses = consultaRegistro($selectCoursesFilter)){
$course_conf_filter_list_prev.='<option value="'.$registroCourses['co_id'].'">'.$registroCourses['co_name'].'</option>';}
此WHILE结果为3 co_id
个记录而不是两个:306,302和302.在这种情况下,即使302在表格中列出两次,并由同一位老师给出(类别ID 39&amp; ; ID 42),只应列出一次,因为它是相同的课程。
据我所知,它会在此查询中找到3条记录,但我不知道避免每门课程之间重复的正确方法。是DDBB worng结构化还是查询错误拼写?
答案 0 :(得分:1)
这是您的查询:
SELECT *
FROM class_conf JOIN
course_conf
ON co_id=cl_fk_co_id
WHERE cl_fk_te_id = '3';
数据有三个维度 - 课程,课程和教师。你只看其中两个。所以,当一门课程有一个老师但有多个班级时,你会得到重复的。
你如何解决这个问题取决于你想做什么。也许这就是你想要的:
SELECT DISTINCT co_id, co_name
FROM class_conf JOIN
course_conf
ON co_id = cl_fk_co_id
WHERE cl_fk_te_id = '3';