Получить записи в запросе многие ко многим - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть три таблицы: 1.article - 2.tag - 3.article_has_tags (В статье может быть много тегов).

article:

id  | title 
1   |  A1   
2   |  A2  
3   |  A3  

tag:

id  | title 
1   |  T1   
2   |  T2  
3   |  T3  

article_has_tags: (он содержит первичные ключи статьи и тегов)

aid | tid 
 1  |  1   
 1  |  2  
 1  |  3
 2  |  1
 3  |  2  

Мне нужно вернуть первые три статьи со всеми их тегами.

Мой запрос:

SELECT article.id, article.title, tag.title FROM article
JOIN article_has_tags ON (article.id = article_has_tags.aid)
JOIN tag ON (article_has_tags.tid = tag.id) ORDER BY article.id limit 3

Но, очевидно, он возвращает:

article.id | article.title | tag.title
    1      |        A1     |    T1
    1      |        A1     |    T2
    1      |        A1     |    T3

Мне нужен примерно такой результат:

article.id | article.title | tag.title
    1      |        A1     | T1-T2-T3
    2      |        A2     |    T1
    3      |        A3     |    T2

Как я могу получить нужный мне результат? Спасибо.

1 Ответ

1 голос
/ 27 апреля 2020

вы можете использовать group_concat в MySQL. Вот демоверсия .

SELECT 
    article.id, 
    article.title, 
    group_concat(tag.title SEPARATOR '-') as tag
FROM article
JOIN article_has_tags 
ON (article.id = article_has_tags.aid)
JOIN tag 
ON (article_has_tags.tid = tag.id) 
GROUP BY
    article.id, 
    article.title
ORDER BY 
    article.id 

Вывод:

*-------------------*
| id  title   tag   |
*-------------------*
  1    A1   T3-T1-T2
  2    A2     T1
  3    A3     T2
*-------------------*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...