2014-01-29 3 views
0

내 모델에서이 codeigniter 활성 레코드 쿼리를 사용하여 가장 많은 포인트를 가진 내 사용자 테이블에서 상위 10 명의 사용자를 얻으려고합니다.다른 테이블에 사용자가있는 경우 테이블 레코드를 얻으십시오

$this->db->order_by('points', 'desc'); 
     $q=$this->db->get('user', 10); 
     $data = $q->result_array(); 
     return $data; 

이것은 잘 작동하고 가장 많은 점수를 가진 상위 10 명의 사용자에 대한 정보를 반환합니다. points은 내 user 테이블에있는 열입니다.

그러나 다른 테이블에 존재하는 상위 10 명의 사용자를 얻으려고 시도했습니다. entries.

항목 테이블에서 사용자가 입력 할 때 현재 사용자의 user_id가 저장됩니다.

나는 열광한 사용자에게 정상을 얻고 싶습니다. 그래서 위의 쿼리를 수정하여 entries 테이블에있는 대부분의 포인트를 가진 10 명의 사용자를 반환하고 싶습니다.

User Table: 

id, name, points 

Entries Table: 

id, time_entered, image, user_id 

어떻게하면됩니까?

나는 조인을 시도하고 방금 가장 많은 점수를 가진 단일 사용자를 반환했습니다.

+0

'user' 테이블과'entries' 테이블은 어떻게 생겼습니까? – Jhn

+0

@Jhn 위의 내용을 참조하십시오. – user3237078

답변

1

엔트리 테이블에 user_id가 외래 키로 포함되기를 바랍니다.

그래서 코드는 다음과 같아야합니다

$this->db->select("user.*,entries.*"); 
$this->db->from("user"); 
$this->db->join("entries","user.id = entries.user_id"); 
$this->db->order_by('user.points', 'desc'); 
$this->db->limit(10); 
$q = $this->db->get();  
$data = $q->result_array(); 
return $data; 
+0

위대한 편집자입니다. 감사 – user3237078

0

,

SELECT * from user AS u 
    WHERE u.id IN (
     SELECT e.user_id from entries AS e 
    ) 
    ORDER BY points DESC LIMIT 10 

을 내가 CI에 익숙하지 않아요하지만 대신 MySQL의 쿼리를 제공하기 위해 노력하겠습니다 그냥 CI AR 쿼리로 변환 . CI에 AR 쿼리를 condition 설정하는 몇 가지 방법이 있다고 생각합니다. 해당 옵션이있는 경우 조건을 IN으로 설정하여 u.id이 항목 테이블에 있는지 확인할 수 있습니다.

관련 문제