我有一个基本的多学校管理系统,我正在努力学习,以便从MySQL数据库中学习查询。
我正在通过students
,schools
,student_grade
,grade_school
等表格进行多次联接。我现在想要获取所有主题的列表学生已被分配。由于有多个可能的行,我有一个student_subject
表来保存student_id,然后是subject_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
如何获得学生分配的所有科目,并将其全部放在“subject_ids”栏中,以获得如下结果:
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
答案 0 :(得分:2)
试试这个:
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
答案 1 :(得分:1)
GROUP_CONCAT()功能将在此处执行您想要的操作。
的重复