2011-09-16 4 views
0

저는 커뮤니티에서 일하고 있으며 사용자 프로필에 많은 사용자 통계를 표시하려고합니다.Codeigniter는 사용자의 통계를 표시합니다.

가장 좋은 방법은 무엇입니까?.

나는 이것을 가지고있다. 그러나 나는 그것의 최선의 방법이라고 생각하지 않는다. 그래서 나는 내 질문에 많은 통계를로드하기 위해 내가 할 수있는 것을 당신이 정말로 설명 할 수있어서 기뻐할 것이다 :

//Get the stats of a user in hes profile 
    function getState($username) { 

     //it has false so it dont try to escape the COUNT() 
     $this->db->select('username, firstname, lastname, freetext, imgPath, city, hood, online, level, 
     COUNT(forumThread.id) as totalThreads, 
     COUNT(forumComments.id) as totalComments 
     ', FALSE); 
     $this->db->join('forumThread', 'forumThread.creater = users.username'); 
     $this->db->join('forumComments'); 
     $this->db->group_by('users.id'); 
     $this->db->where('username', $username); 

     $statQuery = $this->db->get('users'); 

     return $statQuery->row(); 
    } 
+0

Codeigniter가 함수를 이스케이프 처리하지 않으므로 선택 항목의 두 번째 매개 변수를 false로 설정할 필요가 없습니다. 실제로 소스 코드는 구분 기호로 쉼표를 사용하여 문자열을 먼저 나눕니다. 그런 다음이 배열을 통해 각 항목이 필드로 간주되기 때문에 이미 존재하지 않는 경우 각 항목에 백틱을 추가합니다. 그러나 괄호가있는 곳이라면 항목을 그대로 유지합니다. –

답변

1

테이블 조인을 시작할 때마다 테이블이 커질수록 쿼리가 상당히 느려질 위험이 있습니다.

한 가지 옵션은 페이지를로드 할 때마다 쿼리를 실행할 필요가 없도록 결과를 캐시하는 것입니다. (나는 CI가 당신에게 캐싱 캐싱을 제공한다고 생각합니다)

또 다른 옵션은 users 테이블에 포럼 스레드의 수와 그들이 작성한 포럼 주석의 수를 갖는 다른 필드를 갖는 것입니다. 데이터베이스에 새 항목을 삽입하면이 카운터도 증가합니다. 따라서 통계 페이지에서 필요한 데이터를로드 할 때 1 개의 테이블을 쿼리하는 것입니다.

두 번째 옵션은 다른 데이터를 입력 할 때 다른 쿼리를 실행하고 삭제할 때 약간 더 큰 오버 헤드를 제공합니다. 그리고/또는 사용자 테이블의 값이 실제로 정확한지 (백그라운드에서 주기적으로 실행되는지) 확인하는 유지 관리 스크립트를 만듭니다.

어쨌든, 지금은 방황하고있는 것 같습니다. 그게 의미가 있다면 몇 가지 바랍니다!

+0

+1에 대한 산책 – Brad

관련 문제