2012-02-04 44 views
1

我正在爲我的作業寫一些博客軟件,我有一個posts表,tags表和post_tagspost_tags存在刪除多對多關係(一個職位可能有很多標籤,一個標籤可能屬於許多職位)。下面是這些表中的字段:從具有關係的表中檢索帖子標籤

帖子

| p_id | title | clean_title | body | published | u_id | 

標籤

| t_id | name | slug | 

post_tags

| t_id | p_id | 

希望你能看到我有什麼會在這裏,標籤使用post_tags錶鏈接到帖子。現在,我想基於posts表的clean_title字段從tags表中檢索nameslug。基本上,如果我給clean_name,我希望與該帖子關聯的所有標籤。我知道我必須使用SQL JOINS,但我沒有太多想法如何使用它們。

這是我已經試過:

$query = $this->db->query("SELECT name, slug 
          FROM tags 
          LEFT JOIN post_tags ON posts.p_id=post_tags.p_id 
          LEFT JOIN tags ON post_tags.t_id=tags.t_id 
          WHERE posts.clean_title = ? 
          ORDER BY name DESC"); 

但我得到這個錯誤:Not unique table/alias: 'tags'

謝謝!

回答

2

您的第一個JOIN引用posts但您不要在其他地方使用該表。我懷疑你的意思是:

 SELECT name, slug 
    /* First table should have been `posts`? */ 
    FROM posts 
    LEFT JOIN post_tags ON posts.p_id=post_tags.p_id 
    LEFT JOIN tags ON post_tags.t_id=tags.t_id 
    WHERE posts.clean_title = ? 
    ORDER BY name DESC 
+0

Woopsie。知道這將是簡單的東西哈哈:P謝謝你。 – 2012-02-04 23:01:22

0

你即將加入tags兩次。更改第二join加入到職位表:

SELECT tags.name, tags.slug 
FROM tags 
LEFT JOIN post_tags ON post_tags.t_id = tags.t_id 
LEFT JOIN posts ON posts.p_id = post_tags.p_id 
WHERE posts.clean_title = ? 

您可以縮短查詢與像別名:

SELECT t.name, t.slug 
FROM tags t 
LEFT JOIN post_tags pt ON pt.t_id = t.t_id 
LEFT JOIN posts p ON p.p_id = pt.p_id 
WHERE p.clean_title = ? 
相關問題