ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 절을 생성할 수 있는 쿼리 빌더를 정리했습니다.

    쿼리 빌더에 대한 내용이 많기 때문에 다음 글에 추가로 작성하겠습니다.


    댓글

Designed by Tistory.