1

私は次のテーブルを持っています:

投稿: ID、タイトル、日付、コンテンツ

タグ: ID、名前

posts_tags : post_id、tag_id

関連するタグのリストでタイトルを選択したい。次のクエリはうまく機能します

SELECT p.title, GROUP_CONCAT( t.name ORDER BY t.name SEPARATOR ',' ) as tags_list
FROM posts AS p
JOIN posts_tags AS pt ON pt.post_id = p.id
JOIN tags AS t ON pt.tag_id = t.id
GROUP BY p.id

このクエリでは、次のようなものが得られます

title             |  tags_list
==================|===============================
Old cinema        |  film,movies
cooking shows     |  cooking,food,kitchen,television
Epic War Films    |  history,movies,war
Art in France     |  art,france,history

特定のタグ (「movies」など) の付いた投稿のみが必要な場合は、where 句を追加してみました。

SELECT p.title, GROUP_CONCAT( t.name ORDER BY t.name SEPARATOR ',' ) as tags_list
FROM posts AS p
JOIN posts_tags AS pt ON pt.post_id = p.id
JOIN tags AS t ON pt.tag_id = t.id
WHERE t.name = 'movies'
GROUP BY p.id

私はこれで終わります

title            |  tags_list
=================|===============================
Old cinema       |  movies
Epic War Films   |  movies

「movies」というタグが付けられたすべての投稿を取得しましたが、問題は、「tags_list」列の各行に「movies」のみが表示され、投稿に関連付けられている他のすべてのタグが含まれていないことです。

どうすればこれを修正できますか?

4

2 に答える 2

1

タグの条件をwhere節からhaving

SELECT p.title, GROUP_CONCAT( t.name ORDER BY t.name SEPARATOR ',' ) as tags_list
FROM posts AS p
JOIN posts_tags AS pt ON pt.post_id = p.id
JOIN tags AS t ON pt.tag_id = t.id
GROUP BY p.id
HAVING t.name = 'movies'
于 2013-06-06T06:45:09.143 に答える