我有一个('courses')表,通过另一个表与('instructors')表有HABTM关系......
我想在一个查询中获得一位教师的数据及所有相关课程。
目前,我有以下SQL:
SELECT *
FROM `instructors` AS `instructor`
LEFT JOIN `courses` AS `course`
ON `course`.`id` IN (
SELECT `course_id`
FROM `course_instructors`
WHERE `course_instructors`.`instructor_id` = `instructor`.`id`
)
WHERE `instructor`.`id` = 1
这个SQL做它应该做的事情,我唯一的“问题”是我为每个连接的行获得多行。
我的问题是:
我可以在一个查询中获得我想要的结果吗?或者我是否必须在PHP中操作数据?
我正在使用PHP和MySQL。
答案 0 :(得分:1)
SELECT *
FROM instructors AS instructor
LEFT JOIN
course_instructors
ON
instructor.id= course_instructors.instructor_id
LEFT JOIN
courses
ON
course_instructors.course_id = course.id
WHERE instructor.id = 1
这假定course_instructors
的PK为(instructor_id,course_id)
查询说明:
WHERE
,确保您获得相关讲师再次:使用正确的约束来避免重复数据很重要。
答案 1 :(得分:1)
查询结果集的每条记录具有相同的格式:相同数量的字段,相同的字段,相同的字段顺序。你无法改变它。
答案 2 :(得分:0)
这就是关系数据库的本质。您需要先获得讲师,然后获得相关课程。我就是这样做的,这就是我一直在做的事情。我不确定它是否存在“黑客”。