PHP/MySQL:连接三个表并合并结果
可能重复:PHP/MySQL:连接三个表并合并结果,php,mysql,sql,join,Php,Mysql,Sql,Join,可能重复: 我有三张桌子: 表1:teacher id firstname surname 表2:课程 id name 表3:U拥有的课程和教师 course_id teacher_id 我想得到的是课程信息和教师信息。我已尝试使用此查询: SELECT * FROM teacher, course, courses_has_teachers WHERE courses_has_teachers.teacher_id = teacher.id AND course.id = cours
我有三张桌子: 表1:
teacher
id
firstname
surname
表2:课程
id
name
表3:U拥有的课程和教师
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
但是这个:
Name | Teacher
--------------------
Course 1 | Person 1
Course 1 | Person 2
Name | Teacher
------------------------------
Course 1 | Person 1, Person 2
有人能帮我吗?尝试使用和您想使用名为group\u 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
此外,您可能希望阅读我写的一篇文章,您可能会发现这篇文章很有用。使用
GROUP\u 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 BY Name和GROUP_CONCAT(教师)函数;您可以在
课程
中包含教师id
的外键。@Hiroto:当然,他需要第三个表,因为一门课程可以有多个教师。@OP:您想要达到的效果真的不太好。你所得到的和你认为是错误的,实际上是可以的。@ Flavius,你可以在一个索引上加上一个索引,在多个条目中有不同的ID和一个非唯一的教程,而这个链接可以回答这个问题,最好把答案的重要部分包含在这里,并提供链接以供参考。如果链接页面发生更改,只有链接的答案可能会无效。我喜欢官方文档的答案。“关键部分”是胡说八道,如果链接消失,mysql将完全消失(或者你在答案中的解释将过时)。介意解释一下为什么这个答案被否决吗?是的,我很好奇为什么我们的两个答案刚刚被打了一巴掌。@Fluffeh nevermind,有些人只是顺道来投票,没有留下任何评论,这让他们感到高兴。很高兴我们能让他们高兴。哈哈:谢谢!这起作用了。的确非常有用。@user1428033GROUP_CONCAT
与CONCAT
不同。第一个是聚合函数,而另一个不是。无论如何,不客气。如果您感到困惑,请随时提问:)