Возможный дубликат:
Можно ли объединить несколько строк 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, который я написал, который вы можете найти полезным.