-
[CodeIgniter] 데이터베이스(Database) 쿼리 빌더 - GROUP BY카테고리 없음 2018. 10. 28. 21:45
▶CodeIgniter 데이터베이스(Database) 쿼리 빌더 - GROUP BY
▶설명
코드이그나이터(CodeIgniter) 쿼리 빌더 4번째 정리입니다.
이번에는 비슷한 데이터를 조회할 때 사용하는 GROUP BY, HAVING, DISTINCT 절을 생성하는 쿼리 빌더 함수에 대해 알아보도록 하겠습니다.
쿼리 빌더 클래스에 대한 자세한 내용은 아래의 매뉴얼을 참조하시기 바랍니다.
예제 코드는 제가 자주 사용하는 방식으로 작성했습니다.
▶GROUP BY 관련 함수
아래의 함수들은 GROUP BY와 HAVING 절을 생성합니다.
$this->db->group_by()
이 함수는 GROUP BY 절을 생성합니다.
사용 방법은 총 2가지가 있습니다.
첫 번째 : 단순 키
$this->db ->select('id, name') ->from('members') ->group_by('name'); // 실행 결과 : SELECT `id`, `name` FROM `members` GROUP BY `name`
두 번째 : 배열
$this->db ->select('id, name') ->from('members') ->group_by(array('id', 'name')); // 실행 결과 : SELECT `id`, `name` FROM `members` GROUP BY `id`, `name`
$this->db->having()
이 함수는 HAVING 절을 생성합니다.
사용 방법은 총 3가지가 있습니다.
첫 번째 : 한 문장
$this->db ->select('id, name') ->from('members') ->group_by('name') ->having('id < 10'); // 실행 결과 : SELECT `id`, `name` FROM `members` GROUP BY `name` HAVING `id` < 10
두 번째 : 단순 키/값
$this->db ->select('id, name') ->from('members') ->group_by('name') ->having('id', 10); // 실행 결과 : SELECT `id`, `name` FROM `members` GROUP BY `name` HAVING `id` = 10
세 번째 : 사용자 키/값
$this->db ->select('id, name') ->from('members') ->group_by('name') ->having('id <', 10); // 실행 결과 : SELECT `id`, `name` FROM `members` GROUP BY `name` HAVING `id` < 10
네 번째 : 연괄 배열
$this->db->having()을 여러 번 사용하면 AND로 연결 됩니다.
$array = array( 'name' => 'Edward', 'id < ' => 10 ); $this->db ->select('id, name') ->from('members') ->group_by('name') ->having($array); // 실행 결과 : SELECT `id`, `name` FROM `members` GROUP BY `name` HAVING `name` = 'Edward' AND `id` < 10
$this->db->or_having()
여러 조건들이 OR로 연결되는 것을 제외하면 $this->db->or_having() 함수와 동일합니다.
$array = array( 'name' => 'Edward', 'id < ' => 10 ); $this->db ->select('id, name') ->from('members') ->group_by('name') ->or_having($array); // 실행 결과 : SELECT `id`, `name` FROM `members` GROUP BY `name` HAVING `name` = 'Edward' OR `id` < 10
▶DISTINCT 함수
아래의 함수는 DISTINCT 절을 생성합니다.
$this->db->distinct()
GROUP BY와 비슷하게 사용하는 경우가 있어서 함께 정리했습니다.
$this->db ->distinct() ->from('members'); // 실행 결과 : SELECT DISTINCT * FROM `members`
그렇지만, 특정 컬럼을 지정해서 DISTINCT를 사용하기 위해서는 SELECT 부분에서 직접 설정해줘야 합니다.
$this->db ->select('DISTINCT name', false) ->from('members'); // 실행 결과 : SELECT DISTINCT name FROM `members`
$this->db->select() 함수에 두 번째 파라미터로 false 넘겨서 이스케이프 기능을 끄지 않으면 에러가 발생합니다.
▶마치며
GROUP BY, HAVING, DISTINCT 절을 생성할 수 있는 쿼리 빌더를 정리했습니다.
쿼리 빌더에 대한 내용이 많기 때문에 다음 글에 추가로 작성하겠습니다.