0

我有一个这样的数据库设置:

post_id | 标题

1 | 一些标题

2 | 另一个标题


tag_id | 标签

1 | 标签01

2 | 标签02


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']

这会导致与其关联的每个标签都有重复的帖子。

问题是我如何遍历与一篇文章相关的所有标签?

预期的输出将是:

post_id 1 = 标签01,标签02

代替

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子句查找您关注的帖子。

如果您的意图是返回所有帖子的所有标签,但每个帖子只有一行,标签列为逗号分隔值(或类似值),您需要查看使用这样的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 回答