私は4つのテーブル(resources、tag_list、resource_tags、vote)を照会し、グループ化されたタグとそのリソースの投票の合計を持つ各リスト項目でリソースのリストを取得しようとしています。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)'を使って、実際の結果と期待した結果を投稿してください。あなたの質問を更新するには、[編集]リンクを使用してください。 –
あなたのリソーステーブルに 'vote'フィールドがありますか? – augustknight
お返事ありがとうございます。私は生のSQLを追加しました、結果はかなり私が期待したものでした。そしてaugustknight投票フィールドは、リソースIDによってリソーステーブルにリンクされた投票というテーブルにあります。 – David