2011-04-05 117 views
0

嵌套數組我有一個(「課程」)具有與(「教官」)通過表另一個表HABTM關係表...獲取SQL結果作爲PHP

我想要得到的數據在一個查詢所有相關課程的講師..

目前,我有以下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

什麼是HABTM? – 2011-04-05 12:45:01

+0

(有和屬於許多/多對多)關係... – 2011-04-05 12:48:33

回答

1

查詢結果集的每個記錄具有相同的格式:相同數量的字段,相同的字段,相同的字段順序。你不能改變這一點。

0

這就是關係數據庫的本質。你需要先獲得教練,然後獲得相關課程。我就是這麼做的,這就是我一直在做的事情。我不確定是否存在「黑客」。

+0

這就是我正在做的... 我只是想知道是否有辦法用SQL來做到這一點。 – 2011-04-05 12:35:14

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的記錄。

同樣重要的是:使用正確的約束來避免重複的數據。

+0

我無法看到我的查詢和您的查詢之間的結果有什麼不同......我仍在爲我正在查詢的導師獲取多行... – 2011-04-05 12:45:18