Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
在MySQL中将多行作为一行获取_Mysql - Fatal编程技术网

在MySQL中将多行作为一行获取

在MySQL中将多行作为一行获取,mysql,Mysql,我有一个基本的多学校管理系统,为了学习从MySQL数据库进行查询,我正在进行有趣的工作 我正在从表中进行大量联接,例如学生,学校,学生年级,学校年级等。我现在想获得学生已分配的所有科目的列表。因为有多个可能的行,我有一个student\u subject表来保存student\u id和subject\u id值 以下查询获取学生的姓名和成绩: SELECT a.id,a.firstnames,a.surname,d.gradename FROM students a LEFT JOIN s

我有一个基本的多学校管理系统,为了学习从MySQL数据库进行查询,我正在进行有趣的工作

我正在从表中进行大量联接,例如
学生
学校
学生年级
学校年级
等。我现在想获得学生已分配的所有科目的列表。因为有多个可能的行,我有一个
student\u subject
表来保存student\u id和subject\u id值

以下查询获取学生的姓名和成绩:

SELECT a.id,a.firstnames,a.surname,d.gradename 
FROM students a 
LEFT JOIN student_grade b ON a.id=b.studentid
LEFT JOIN grade_school c ON c.id=b.gradeid
LEFT JOIN grades d ON c.gradeid=d.id
WHERE a.schoolid=? AND b.gradeid=? ORDER by a.surname ASC
这将导致每一行返回学生的姓名和成绩,如下所示:

ID   |   Firstname    |   Surname    |   Grade
 1   |     John       |      Doe     |     4
 5   |      Sarah     |   Marshall   |     7
我如何获取学生分配的所有科目,并将其全部放在“科目ID”列中,以获得如下结果:

ID   |   Firstname    |   Surname    |   Grade  |  Subjects
 1   |     John       |      Doe     |     4    |  5,54,2,56
 5   |      Sarah     |   Marshall   |     7    |  2,4,12,17
Table `students`
id | firstnames | surname | schoolid


Table `student_grade`
id | studentid | gradeid


Table `grade_school`
id | gradeid| schoolid


Table `grades`
id | gradename|


Table `student_subject`
id | studentid| subjectid
 4 |    1     |    5
 5 |    1     |    54
 6 |    1     |    2
 7 |    1     |    56
 8 |    5     |    2
 9 |    5     |    4
10 |    5     |    12
11 |    5     |    17
我的表格结构如下:

ID   |   Firstname    |   Surname    |   Grade  |  Subjects
 1   |     John       |      Doe     |     4    |  5,54,2,56
 5   |      Sarah     |   Marshall   |     7    |  2,4,12,17
Table `students`
id | firstnames | surname | schoolid


Table `student_grade`
id | studentid | gradeid


Table `grade_school`
id | gradeid| schoolid


Table `grades`
id | gradename|


Table `student_subject`
id | studentid| subjectid
 4 |    1     |    5
 5 |    1     |    54
 6 |    1     |    2
 7 |    1     |    56
 8 |    5     |    2
 9 |    5     |    4
10 |    5     |    12
11 |    5     |    17
该函数将在此处执行您想要的操作

这个问题是重复的

试试这个:

SELECT a.id,a.firstnames,a.surname,d.gradename, GROUP_CONCAT(s.subjectid)
FROM students a 
LEFT JOIN student_grade b ON a.id=b.studentid
LEFT JOIN grade_school c ON c.id=b.gradeid
LEFT JOIN grades d ON c.gradeid=d.id
LEFT JOIN student_subject s ON s.studentid=a.id
WHERE a.schoolid=? AND b.gradeid=? ORDER by a.surname ASC

同时检查或

可能的感谢副本,但这只返回一名学生。但是我想我理解这个概念。也许可以添加
GROUP BY a.id
谢谢,我来看看GROUP_CONCAT()