MySQL查询中的复杂连接

时间:2016-09-15 15:39:32

标签: mysql

我遇到了以我需要的方式连接我的MySQL结果的问题,所以很感激小帮助。

我有树表 - 帖子,类别,posts_categories:

帖子:

+----------+
| Field    |
+----------+
| id       |
| title    |
| body     |
| date     |
+----------+

类:

+---------------+
| Field         |
+---------------+
| id            |
| category_name |
+---------------+

posts_categories:

+-------------+
| Field       |
+-------------+
| id          |
| post_id     |
| category_id |
+-------------+

我当前的MySQL查询获取帖子的所有类别名称:

SELECT 
    posts.*, categories.category_name
FROM
    posts,
    categories,
    posts_categories
WHERE
    posts_categories.category_id = categories.id
        AND posts.id = posts_categories.post_id;

上述查询结果:

id       | title    | posts.category_name
 0         title1     category1
 0         title1     category3
 0         title1     category6
 1         title2     category9

但是我想连接category_name,以便我的MySQL查询结果在一行中显示每个帖子的所有类别名称。 Lke this:

id       | title    | posts.category_name
 0         title1     category1, category3, category6
 1         title2     category9

我该怎么做?

1 个答案:

答案 0 :(得分:0)

posts列分组并使用group_concat()获取类别列表

SELECT posts.id, posts.title, 
       group_concat(categories.category_name separator ', ')
FROM posts 
LEFT JOIN posts_categories ON posts.id = posts_categories.post_id
LEFT JOIN categories ON posts_categories.category_id = categories.id
GROUP BY posts.id, posts.title

BTW不再使用旧的连接语法。像我的查询一样使用显式的JOIN sytax。

相关问题