Mysql 连接6个不重复的表
我试图从6个不同的表中获取数据,但每次都会显示多个重复。我读了很多这方面的书,但经过多次实验后,我并没有找到答案。希望有人知道答案。这是我的桌子和我的一个实验Mysql 连接6个不重复的表,mysql,database,join,Mysql,Database,Join,我试图从6个不同的表中获取数据,但每次都会显示多个重复。我读了很多这方面的书,但经过多次实验后,我并没有找到答案。希望有人知道答案。这是我的桌子和我的一个实验 用户-id、电子邮件 教师-id、用户id、姓名、电话 教师班级-id,班级id,教师id 类-id,类 教师纪律-id、学科id、教师id 学科-id, 纪律 我试图获得以下观点: Name Email Telephone Classes Discipl
Name Email Telephone Classes Disciplines
---------------------------------------------------------------------------------
First name first@gmail.com 2559857544 Va,VB,VIa Html,CSS
相反,我的表如下所示:
Name Email Telephone Classes Disciplines
---------------------------------------------------------------------------------
First name first@gmail.com 2559857544 Va Html
First name first@gmail.com 2559857544 Vb Html
First name first@gmail.com 2559857544 VIa Html
First name first@gmail.com 2559857544 Va CSS
First name first@gmail.com 2559857544 Vb CSS
First name first@gmail.com 2559857544 VIa CSS
这是我的密码
$sql_users_students = "SELECT * FROM users
INNER JOIN teachers ON users.id = teachers.user_id
INNER JOIN teacher_class ON teachers.user_id = teacher_class.teacher_id
INNER JOIN classes ON teacher_class.class_id = classes.id
LEFT JOIN teacher_discipline ON teachers.user_id = teacher_discipline.teacher_id
left JOIN disciplines ON teacher_discipline.discipline_id = disciplines.id";
<tbody>
<?php foreach($teachers as $key => $info){
echo "<tr><td>".$info["name"]."</td><td>".$info["email"]."</td><td>".$info["telephone"]."</td><td>".$info["class"]."</td><td>".$info["discipline"]."</td></td><td><a href=''php/delete_student.php''>Изтриване</a></td></tr>";} ?>
</tr>
</tbody>
$sql\u users\u students=“SELECT*FROM users”
users.id=teachers.user\u id上的内部联接教师
在teachers.user\u id=teacher\u class.teacher\u id上内部加入teacher\u类
教师上的内部联接类。类\u id=classes.id
左键在teachers.user\u id=teacher\u diction.teacher\u id上加入教师纪律
左键连接教师纪律上的纪律。纪律\u id=纪律。id”;
使用GROUP by
和GROUP_CONCAT()
将这些值连接在一起,如下所示:
SELECT
name,
email,
telephone,
group_concat(distinct classes) as classes,
group_concat(distinct disciplines) as disciplines
FROM users
INNER JOIN teachers ON users.id = teachers.user_id
INNER JOIN teacher_class ON teachers.user_id = teacher_class.teacher_id
INNER JOIN classes ON teacher_class.class_id = classes.id
LEFT JOIN teacher_discipline ON teachers.user_id = teacher_discipline.teacher_id
left JOIN disciplines ON teacher_discipline.discipline_id = disciplines.id
group by name, email, telephone
请使用组_concat(函数)
考虑GROMPY-CONTATA。如果您从不使用GROPY-CONTAT,您将是很好的-尤其是在应用程序代码的上下文中。
SELECT users.name, users.email, teachers.telephone,
group_concat(classes.class ', ') as classes, group_concat(disciplines.discipline ', ')
as disciplines
FROM users
INNER JOIN teachers ON users.id = teachers.user_id
INNER JOIN teacher_class ON teachers.user_id = teacher_class.teacher_id
INNER JOIN classes ON teacher_class.class_id = classes.id
LEFT JOIN teacher_discipline ON teachers.user_id = teacher_discipline.teacher_id
left JOIN disciplines ON teacher_discipline.discipline_id = disciplines.id";