SQL连接3个表标记系统codeigniter

时间:2012-06-11 20:21:17

标签: sql codeigniter join tags

我一直试图为我的帖子提出一个标签系统,但是我遇到了我想要的价值。相反,我似乎无法理解表格连接的逻辑。我试图找到帮助我的信息,但我想我需要有人真正奠定基础。

无论如何,这些是我的表(缩短帖子表);

POSTS
post_id
post_title
post_freetext

POST_TAGS
post_id
tag_id

TAGS
tag_id
tag_text

我要做的是获取连接到单个标签的所有帖子。

我的CodeIgniter代码如下所示;

   $this->db->select('*');
   $this->db->from('posts');
   $this->db->join('post_tags', 'post_tags.post_id = posts.post_id' ,'inner');
   $this->db->join('tags', 'tags.tag_id = posts.post_id', 'inner');
   $this->db->where('tag_text =', $tagid);
   $this->db->order_by('posts.post_id', 'desc');
   $q = $this->db->get();

$ tagid在这种情况下是我要找的字符串(读取标签)。

我成功加入两个表并获取帖子但后来我意识到我无法让用户查看所有标签(因此我需要一个单独的"标签"表) 。但似乎无法做到这一点。

任何帮助都会非常感激,我确实意识到这个问题可能已被多次回答 - 但仍然无法绕过逻辑。

2 个答案:

答案 0 :(得分:1)

关于加入此页面的逻辑可能会有所帮助

http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

在你的代码中你在第二次加入时有错误

  

$ this-> db-> join('tags','tags.tag_id = posts.post_id','inner');

这两个表没有连接(外键和指向的位置)。

你必须使用table post_tags而不是帖子 所以使用这样的东西: 'post_tags.tag_id = tags.tag_id'

答案 1 :(得分:0)

$this->db->select('*');
   $this->db->from('posts');
   $this->db->join('post_tags', 'post_tags.post_id = posts.post_id' ,'inner');
   $this->db->join('tags', 'tags.tag_id = post_tags.tag_id', 'inner');
   $this->db->where('tag_text', $tagid);
   $this->db->order_by('posts.post_id', 'desc');
   $q = $this->db->get();