【发布时间】:2012-03-30 11:00:26
【问题描述】:
我正在查询四个表(它们是:resources、tag_list、resource_tags 和 votes)并尝试检索资源列表,其中每个列表项都具有分组标签和该资源的投票总和。
这是我目前的模型:
$this->db->select('*');
$this->db->select('GROUP_CONCAT(DISTINCT tag SEPARATOR " | ") AS tags, SUM(vote) AS sumvotes');
$this->db->from('resources');
$this->db->join('resource_tags', 'resources.r_id = resource_tags.resource_id', 'left');
$this->db->join('tag_list', 'tag_list.t_id = resource_tags.tag_id', 'left');
$this->db->join('votes', 'votes.resource_id = resources.r_id', 'left');
$this->db->where('resources.published', '1');
$this->db->group_by('resources.r_id');
$this->db->order_by('votes.vote', 'desc');
$query = $this->db->get();
编辑:这是原始生成的 SQL
SELECT *, GROUP_CONCAT(DISTINCT tag SEPARATOR " | ") AS tags, SUM(vote) AS sumvotes
FROM (`olu_resources`)
LEFT JOIN `olu_resource_tags` ON `olu_resources`.`r_id` = `olu_resource_tags`.`resource_id`
LEFT JOIN `olu_tag_list` ON `olu_tag_list`.`t_id` = `olu_resource_tags`.`tag_id`
LEFT JOIN `olu_votes` ON `olu_votes`.`resource_id` = `olu_resources`.`r_id`
WHERE `olu_resources`.`published` = '1'
GROUP BY `olu_resources`.`r_id`
ORDER BY `olu_votes`.`vote` desc
除了计算正确的票数外,它似乎做了所有事情,它返回票数乘以该项目的标签数。 有谁知道为什么会这样?或者如何解决这个查询?
【问题讨论】:
-
您是否分析了实际查询以查看原始生成的 SQL?使用
$this->output->enable_profiler(TRUE)并发布实际结果以及您预期的结果。使用edit 链接更新您的问题。 -
您的资源表中有
vote字段吗? -
您好,感谢您的回复。我添加了原始 sql,结果几乎符合我的预期。并且 augustknight 投票字段位于名为 votes 的表中,该表通过资源 id 链接到资源表。
-
投票列的数据类型是什么?
-
嘿,Teez,投票列类型是 'int(1)'。
标签: php mysql codeigniter sum group-concat