2016-09-15 17 views
0

MySQLの結果を私が必要とした方法で連結することに問題があるので、小さな助けに感謝します。複雑なMySQLクエリの連結

記事:

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

カテゴリ:

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

posts_categories:

記事、カテゴリ、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 

私のMySQLのように私は、カテゴリ名を連結したいのですがクエリ結果には、各行のすべてのカテゴリ名が1行に表示されます。それには:

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

どうすればよいですか?あなたのposts列によって

答えて

0

グループと

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 

がところでもう古い結合構文を使用していないカテゴリの一覧を取得するにはgroup_concat()を使用しています。私のクエリに明示的なJOIN sytaxを使用してください。

+0

これは私が必要なものです。ありがとうございました! – MerkisL