2016-09-15 2 views
0

У меня возникли проблемы, чтобы объединить мои результаты MySQL так, как мне было нужно, поэтому небольшая помощь будет оценена по достоинству.Сложный concatenate в запросе 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 это:

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

Как бы я это сделал?

ответ

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, как в моем запросе.

+0

Вот что мне нужно. Спасибо! – MerkisL

Смежные вопросы