Mysql 连接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

我试图从6个不同的表中获取数据,但每次都会显示多个重复。我读了很多这方面的书,但经过多次实验后,我并没有找到答案。希望有人知道答案。这是我的桌子和我的一个实验

  • 用户-id、电子邮件
  • 教师-id、用户id、姓名、电话
  • 教师班级-id,班级id,教师id
  • 类-id,类
  • 教师纪律-id、学科id、教师id
  • 学科-id, 纪律
  • 我试图获得以下观点:

    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";