在PHP中将SQL结果作为嵌套数组获取

时间:2011-04-05 12:31:50

标签: php mysql join

我有一个('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。

3 个答案:

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

查询说明:

  1. 首次加入+ WHERE,确保您获得相关讲师
  2. 第二次连接匹配属于此教师的course_instructor表中的所有条目。如果没有找到,将在所有字段中返回一行为NULL
  3. 上次加入会匹配course_instructor中找到的条目中的所有相关课程。如果没有人会在所有字段中返回一个包含NULL的记录。
  4. 再次:使用正确的约束来避免重复数据很重要。

答案 1 :(得分:1)

查询结果集的每条记录具有相同的格式:相同数量的字段,相同的字段,相同的字段顺序。你无法改变它。

答案 2 :(得分:0)

这就是关系数据库的本质。您需要先获得讲师,然后获得相关课程。我就是这样做的,这就是我一直在做的事情。我不确定它是否存在“黑客”。