Объединение 6 таблиц без дубликатов - PullRequest
0 голосов

Я пытался получить данные из 6 разных таблиц с объединениями, но каждый раз показывались множественные дубликаты. Я много читал об этом, но после многих экспериментов так и не ответил. Надеюсь, кто-то знает ответ. Вот мои таблицы и один из моих экспериментов.

  1. Users -id, email
  2. Учителя - id, user_id, name, phone
  3. Teacher_class - id, class_id , учитель_id
  4. Классы - id, class
  5. Teacher_Disipline - id, discline_id, teacher_id
  6. Дисциплины - 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>

Ответы [ 2 ]

0 голосов
/ 25 мая 2020

Используйте group_concat (функция),

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";
0 голосов
/ 25 мая 2020

Чтобы объединить эти значения вместе, используя 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...