Присоединиться к сводной таблице в MySQL

Как объединить разные таблицы с помощью сводной таблицы

У меня есть 4 стола вроде

 users

 id  |  name |
 -------------
  1  |  abc  |
  2  |  ccc  |

user_profile

id   |  user_id | email |
-------------------------------
1    |    1     | [email protected] 
2    |    2     | [email protected]

skills

id    |  skill_name  |
--------------------------
1    |   java       |
2    |   php        | 

user_skills

user_id   | skill_id   |
---------------------------
 1       |   1        |
 1       |   2        |
 2       |   1        |  

Результат должен быть

 name  |  email       |  skills   |
 ----------------------------------
 abc   |[email protected] | java, php |
 ccc   |[email protected] | java      |  

Я могу присоединиться к нескольким таблицам, но у меня проблема с присоединением к сводной таблице

Я пробовал ниже с запросом

 SELECT users.name,user_profiles.email, group_concat(programs.name) 
 from users
 JOIN user_profiles on user_profiles.user_id = users.id
 LEFT JOIN user_skills on user_skills.user_id = users.id
 LEFT JOIN skills on user_skills.skill_id = skills.id
 GROUP BY users.id

Может ли кто-нибудь помочь мне в этом, пожалуйста ?? Спасибо

Сделайте свою группу concat на skills.skill_name

Romain B. 19.03.2018 12:14
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
1
516
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ваш запрос должен работать. Возможно, проблема в ссылке на programs, а не на skills:

select u.name, up.email, group_concat(s.name) 
from users u join
     user_profiles up
     on up.user_id = u.id left join
     user_skills us
     on us.user_id = u.id left join
     skills s
     on us.skill_id = s.id
group by u.name, up.email;
Ответ принят как подходящий

GROUP_CONCAT необходим для создания списка навыков в формате CSV:

SELECT
    u.name,
    up.email,
    GROUP_CONCAT(s.skill_name) AS skills
FROM users u
INNER JOIN user_profile up
    ON u.id = up.user_id
LEFT JOIN user_skills us
    ON u.id = us.user_id
INNER JOIN skills s
    ON us.skill_id = s.id
GROUP BY
    u.id, u.name, up.email;

Демо

Обратите внимание, что я группирую как по идентификатору пользователя, так и по имени, потому что, возможно, у двух пользователей одно и то же имя. Перейдите по ссылке ниже, чтобы запустить SQLFiddle.

Другие вопросы по теме