Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/MySQL:连接三个表并合并结果_Php_Mysql_Sql_Join - Fatal编程技术网

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,有些人只是顺道来投票,没有留下任何评论,这让他们感到高兴。很高兴我们能让他们高兴。哈哈:谢谢!这起作用了。的确非常有用。@user1428033
GROUP_CONCAT
CONCAT
不同。第一个是聚合函数,而另一个不是。无论如何,不客气。如果您感到困惑,请随时提问:)