【发布时间】:2012-03-13 20:19:18
【问题描述】:
我有 4 个表:question_tags、tags、questions 和 users。
问题结构为: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)
附:每个问题可以有多个标签。
数据库表标签codeigniter-2
【问题讨论】:
-
我认为您可以尝试在
question.q_id=question_tags.q_id和question_tags.tag_id=tags.tag_id和GROUP BY(q_id)之间使用左联接选择GROUP_CONCAT(tag_name)(我可以在MySQL 中编写查询,但不要知道它是如何在 codeigniter 中完成的)。这将返回您的信息和每个问题的以逗号分隔的标签名称列表。 -
我试过这个:
SELECT *, GROUP_CONCAT(tags.tag_name) FROM questions LEFT JOIN users ON q_author = users.id LEFT JOIN question_tags ON questions.q_id=question_tags.q_id LEFT JOIN tags ON questions.q_id = question_tags.q_id GROUP BY questions.q_id,但它返回所有标签,而不是这个问题的标签。我的错在哪里? -
第二个
LEFT JOIN(到tags)应该是ON tags.tag_id = questions_tags.tag_id。 -
感谢您的想法!我终于想出了这个:
SELECT * , GROUP_CONCAT( tags.tag_name ) FROM questions LEFT JOIN users ON q_author = users.id LEFT JOIN question_tags ON questions.q_id = question_tags.q_id LEFT JOIN tags ON tags.tag_id = question_tags.tag_id GROUP BY questions.q_id -
请记住 group_concat 的默认限制 (1024),如果某些问题标签超过该限制,您可能会修剪数据:)
标签: php database codeigniter-2