2012-02-23 142 views
1

我有4個表格:question_tags,標籤,問題和用戶。從很多表格獲取信息

問題結構是:q_id,q_title,q_content,q_date,q_author(從用戶表中的id )。

標籤結構是:TAG_ID,TAG_NAME,tag_description。

Question_tags結構是:id,tag_id,q_id。

我想列出所有問題,並在每個問題標題旁邊顯示和標記。我已經拿出這個到目前爲止:

$this->db->join('users', 'q_author = users.id', 'left'); 
$this->db->order_by('q_id', 'desc'); 
$this->db->limit($per_page, $offset); 
$query = $this->db->get('questions'); 

但沒有關於標籤的想法。 (也是我使用CodeIgniter)

P.S.每個問題都可以有多個標籤。

笨-2

+1

我想你可以嘗試在'question.q_id = question_tags.q_id'和一個JOIN(其中'question_tags.tag_id = tags.tag_id'和一個GROUP BY(q_id))之間選擇'GROUP_CONCAT(tag_name) '(我可以在MySQL中編寫查詢,但不知道它在codeigniter中是如何完成的)。這將返回您的信息和每個問題的逗號分隔的標籤名稱列表。 – 2012-02-23 12:31:02

+0

我試過這個:'SELECT *,GROUP_CONCAT(tags.tag_name)FROM問題LEFT JOIN用戶ON q_author = users.id LEFT JOIN question_tags ON questions.q_id = question_tags.q_id LEFT JOIN標記ON questions.q_id = question_tags.q_id GROUP BY questions.q_id',但它返回所有標籤,而不是這個問題。我的錯誤在哪裏? – 2012-02-23 12:48:58

+1

第二個'LEFT JOIN'(到'tags')應該是'ON tags.tag_id = questions_tags.tag_id'。 – 2012-02-23 12:54:33

回答

1

,如果你想避免在主查詢返回的重複數據,您需要有不同的查詢數據庫表的標籤。因爲您有許多與每個問題相關的標籤,您應該循環查看您的問題結果,並在每個循環迭代中查詢該問題的標籤。