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

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

+4
28 сент. '12 в 7:42
источник поделиться
3 ответа

Используйте 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
+3
28 сент. '12 в 7:45
источник

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

+2
28 сент. '12 в 7:43
источник

Для достижения этой цели вы хотите использовать функцию 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, который я написал, который вам может пригодиться.

+2
28 сент. '12 в 7:44
источник

Посмотрите другие вопросы по меткам или Задайте вопрос