7

重複の可能性:
複数のMySQL行を1つのフィールドに連結できますか?

私は3つのテーブルを持っています:

表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

欲しいものは手に入りますが、コースに複数の教師がいる場合は、結果を組み合わせたいと思います。同じコース情報を含む複数の行の代わりに、コース情報と教師のリストを含む1つの単純な行を取得したいと思います。

このようではありません:

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

でも、これ:

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

誰かがこれを手伝ってくれませんか?

4

3 に答える 3

7

を使用し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
于 2012-09-28T07:45:56.317 に答える
3

これを実現するには、group_concat という mysql 関数を使用します。クエリは次のようになります。

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 形式で書き直しました。これはあなたがよく知らないかもしれませんが、複数の結合を含むクエリを非常に読みやすくすることができます

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を読んでおくと便利かもしれません。

于 2012-09-28T07:44:02.977 に答える
2

GROUP_CONCATGROUP BYを使用してみてください。

于 2012-09-28T07:43:43.730 に答える