PHP / MySQL: объединение трех таблиц и объединение результатов

Возможный дубликат:
Можно ли объединить несколько строк MySQL в одно поле?

У меня три таблицы:

Таблица № 1: teacher

 id firstname surname 

Таблица №2: course

 id name 

Таблица №3: courses_has_teachers

 course_id teacher_id 

То, что я хочу получить, – это информация о курсе с информацией о преподавателях. Я попробовал это с помощью этого запроса:

 SELECT * FROM teacher, course, courses_has_teachers WHERE courses_has_teachers.teacher_id = teacher.id AND course.id = courses_has_teachers.course.id 

Я получаю то, что хочу, НО: если курс имеет более одного учителя, я хочу совместить результаты. Вместо нескольких строк с одной информацией курса я хочу получить одну простую строку с информацией о курсе и списком учителей.

Не так:

 Name | Teacher -------------------- Course 1 | Person 1 Course 1 | Person 2 

Но это:

 Name | Teacher ------------------------------ Course 1 | Person 1, Person 2 

Может ли кто-нибудь помочь мне в этом?

Используйте GROUP_CONCAT . Попробуй это,

 SELECT a.name, GROUP_CONCAT(CONCAT(firstname, ' ', surname)) FROM course a INNER JOIN courses_has_teachers b ON a.id = b.course_id INNER JOIN teacher c ON b.teacher_id = c.iD GROUP BY a.name 

Попробуйте использовать GROUP_CONCAT и GROUP BY .

Для этого вы хотите использовать функцию mysql, называемую group_concat. Ваш запрос будет выглядеть примерно так:

 SELECT courseName, group_concat(teacherName) FROM teacher, course, courses_has_teachers WHERE courses_has_teachers.teacher_id = teacher.id AND course.id = courses_has_teachers.course.id group by courseName 

Я переписал этот запрос в формате ANSI-92, с которым вы, возможно, не знакомы, но может делать запросы с несколькими соединениями. SO гораздо проще читать:

 SELECT courseName, group_concat(teacherName) FROM teacher join course on courses_has_teachers.teacher_id = teacher.id join courses_has_teachers on course.id = courses_has_teachers.course.id WHERE // Any conditions you want on the query group by courseName 

Кроме того, вам может потребоваться прочитать длинный Q & A, который я написал, который вы можете найти полезным.