2013-01-23 76 views
0

我有這樣的數據庫設置:Codeigniter多對多關係循環

post_id | title

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

這導致重複的職位相關聯的每個標籤訪問標籤用它。

問題是我如何循環與一個職位相關的所有標籤?

預期輸出是:

POST_ID 1 = tag01,tag02

,而不是

POST_ID 1 = tag01

POST_ID 1 = tag02

+0

這就是爲什麼ORM的可以有這樣的PITA。他們對簡單的事情很簡單,學習知識的一個全新的領域。你最好學習如何使用連接。只是我2美分。 –

回答

1

如果你的意圖是隻是爲了查找僅與單個帖子相關的標籤,您需要過濾查詢以僅使用01查找您關注的帖子條款。

如果您的意圖是要返回所有帖子的所有標籤,但每個帖子只有一行標籤以逗號分隔值(或類似)列出,那麼您需要查看使用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` 
1

試試這個

$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');