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