2012-02-23 85 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

,如果你想避免在主查询返回的重复数据,您需要有不同的查询数据库表的标签。因为您有许多与每个问题相关的标签,您应该循环查看您的问题结果,并在每个循环迭代中查询该问题的标签。