Php 从许多表中获取信息

Php 从许多表中获取信息,php,database,codeigniter-2,Php,Database,Codeigniter 2,我有4个表格:问题标签、标签、问题和用户 问题结构是:q_id、q_标题、q_内容、q_日期、q_作者(id 从用户表中) 标签结构为:标签id、标签名称、标签描述 问题标签结构是:id,tag,q 我想列出所有问题,并在每个问题标题旁边显示及其标签。到目前为止,我已经想到了这一点: $this->db->join('users', 'q_author = users.id', 'left'); $this->db->order_by('q_id', 'desc'); $

我有4个表格:问题标签、标签、问题和用户

问题结构是:q_id、q_标题、q_内容、q_日期、q_作者(id 从用户表中)

标签结构为:标签id、标签名称、标签描述

问题标签结构是:id,tag,q

我想列出所有问题,并在每个问题标题旁边显示及其标签。到目前为止,我已经想到了这一点:

$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

如果希望避免在主查询中返回重复数据,则需要进行不同的查询。因为每个问题都有许多相关的标记,所以您应该循环查询问题结果,并在每个循环迭代中查询该问题的标记。

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

我认为您可以尝试选择
GROUP\u CONCAT(标签名称)
question.q\u id=question\u tags.q\u id
question\u tags.tag\u id=tags.tag\u id
分组依据(q\u id)
(我可以在MySQL中编写查询,但不知道在codeigniter中是如何完成的)。这将返回您的信息和每个问题的标记名的逗号分隔列表。我尝试了以下方法:
SELECT*,GROUP\u CONCAT(tags.tag\u name)FROM questions LEFT JOIN users ON q\u author=users.id LEFT JOIN question\u tags ON questions.q\u id LEFT JOIN tags ON questions.q\u id=questions\u tags.q\u id按问题分组。q\u 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.tags_id=GROUP BY questions.q_id
记住GROUP_CONCAT(1024)的默认限制,如果一些问号超出了限制,您可能已经修剪了数据:)我想您可以尝试选择
GROUP\u CONCAT(tag\u name)
,在
question.q\u id=question\u tags.q\u id
GROUP BY(q\u id)
之间使用左连接(我可以在MySQL中编写查询,但不知道如何在codeigniter中完成)。这将返回您的信息和每个问题的标记名的逗号分隔列表。我尝试了以下方法:
SELECT*,GROUP\u CONCAT(tags.tag\u name)从问题左键加入问题上的用户作者=用户。id左键加入问题上的问题标签。q\U id=问题标签。q\U id左键加入问题上的标签。q\U id=问题标签。q\U id按问题分组。q\U id
,但它返回所有标签,而不是此问题的标签。我的错误在哪里?第二个
左键加入
(到
标签
)应该是tags.tag\u id=questions\u tags.tag\u id
。谢谢你的想法!我终于想到了:
SELECT*,GROUP\u CONCAT(tags.tag\u name)从问题左侧加入问题上的用户作者=用户。id左侧加入问题上的问题标记。q\U id=问题标记。q\U id左侧加入标记。标记标记=问题标记。标记id按问题分组。q\U id
请记住组的默认限制。\u concat(1024),如果某些问题标记超过该限制,则可能已修剪数据:)