2011-02-08 12 views
1

私は自分のデータベースの投稿に付いているすべてのタグを選択しようとしていますが、なんらかの理由でタグを持つすべての投稿に対して1つのタグしか取得できません。joinクエリの問題

これは私が使用しているクエリです:

SELECT p.post_id, p.post_title, t.tag_id, t.tag_name 
FROM posts p 
LEFT JOIN posts_tags pt ON pt.post_id = p.post_id 
LEFT JOIN tags t ON pt.tag_id = t.tag_id 

任意のアイデア?

+0

投稿にすべてのタグが関連付けられている場合、その質問は正しいです。そうでないと思われる場合は、データをチェックしてください。 1つの投稿に限定したい場合は、WHERE句を追加してください。 – AlexanderMP

+0

あなたの質問は正しいです。あなたはそれぞれの投稿の複数の行にすべてのタグを持っています – pcofre

+0

あなたは正しいと思いますが、投稿が複数のタグを持っていたときに、投稿の行が空であることを期待していたので、気づいていませんでした.. – networkprofile

答えて

2

各投稿には多くのタグを付けることができます。私が示唆しているのは、MySQL's GROUP_CONCAT()を使用して、すべてのタグを1つのフィールドに入れることです。必要に応じて、スクリプト内のそのフィールドを解析することができます。

編集 タグテーブルに結合されたままになっているように見えます。したがって、そのタグの行だけが返されているようです。 ON句のテーブルを切り替えて、もう一方の方向に結合してください。次に、結果を繰り返し処理する必要があります(タグごとに行があるはずです)。私のオリジナルのソリューションは、すべてのタグを1つのフィールドにグループ化しました。

+0

あなたはタグから1行を取得する方法。問題は、これがすでにそうであるように思われる "私はタグを持つすべての投稿のための1つのタグを取得しています" –

+0

あなたは正しいと思います。編集を参照してください。 –

+0

group_concat()は、私が探していたものです。 – networkprofile

1

正常に動作するはずです。実際、SOデータ構造に近いので、data.stackexchange.comを使用して作成しました。うまく動作します。there