0

私は次のようなデータベース設定をしています:

post_id | タイトル

1 | いくつかのタイトル

2 | 別のタイトル


tag_id | 鬼ごっこ

1 | tag01

2 | tag02


post_id | tagt_id

1 | 1

1 | 2

2 | 1

私はこれらのテーブルを次のコードで結合しました:

$this->db->select('*');
$this->db->from('posts');
$this->db->join('posts_tags', 'posts.post_id = post_tags.post_id', 'inner');
$this->db->join('tags', 'posts_tags.tag_id = tags.tag_id', 'inner');

私の見解では、を使用してタグにアクセスできます

$post['tag']

これにより、関連付けられているすべてのタグの投稿が重複します。

問題は、1つの投稿に関連付けられているすべてのタグをどのようにループするかです。

期待される出力は次のようになります。

post_id 1 = tag01、tag02

それ以外の

post_id 1 = tag01

post_id 1 = tag02

4

2 に答える 2

2

これを試して

   $this->db->select('posts.post_id,GROUP_CONCAT(posts.tag) as all_tags');
   $this->db->from('posts');
   $this->db->join('posts_tags', 'posts.post_id = post_tags.post_id', 'inner');
   $this->db->join('tags', 'posts_tags.tag_id = tags.tag_id', 'inner');
于 2013-01-24T00:03:38.833 に答える
1

単一の投稿にのみ関連するタグを検索するだけの場合は、クエリをフィルタリングして、WHERE句を使用して関係のある投稿のみを検索する必要があります。

すべての投稿のすべてのタグを返すことを目的としているが、各投稿に1行のみがあり、タグがコンマ区切り値(または同様の値)としてリストされている場合は、次のようなGROUP_CONCAT関数の使用を検討する必要があります。SELECT

SELECT pt.post_id AS `post_id`, GROUP_CONCAT(t.tag) AS `tags`
FROM post_tags AS pt
INNER JOIN tags AS t ON pt.tag_id = t.tag_id
GROUP BY `post_id`
于 2013-01-24T00:01:53.550 に答える