我在查詢四個表(它們是:資源,tag_list,resource_tags和投票),並試圖檢索每個列表項具有分組標記和該資源的投票總和的資源列表。Codeigniter:選擇行的SUM給SUM時間GROUP_CONCAT結果?
這是我當前的模型:
$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)'並且發佈實際結果以及你期望的結果。使用[編輯]鏈接更新您的問題。 – 2012-03-14 00:31:58
資源表中的「投票」字段? – augustknight 2012-03-14 00:36:19
嘿,謝謝你的回覆。我已經添加了原始的sql,結果幾乎是我所期望的。而augustknight投票字段位於表格中,該表格由資源ID鏈接到資源表。 – David 2012-03-14 00:48:11