2014-11-04 4 views
0

나는 테이블을 활동이 : 나는 모든 IP 및 기타 데이터를 선택해야지정된 열에서 가장 높은 값을 가진 행을 선택하지 고유 값은해야 별개의

 
id last_active login ip 
1 1000  user1 192.168.10.10 
2 2000  user2 192.168.10.20 
3 3000  user3 192.168.10.30 
4 4000  user1 192.168.10.10 
5 5000  user2 192.168.10.20 
6 6000  user2 192.168.10.20 
7 7000  user1 192.168.10.10 

을 행이 있지만 어디에만 last_active이 가장 높습니다. 그래서 결과는 좋아한다 :

 
3 3000 user3 192.168.10.30 
6 6000 user2 192.168.10.20 
7 7000 user1 192.168.10.10 

내가 사용하여 시도했다 :

 
ORM::factory('Activity')->order_by('last_active','DESC')->group_by('ip')->find_all(); 

을하고 그 결과는 다음과 같습니다 당신이 볼 수 있듯이

 
array(4) (
    "id" => string(1) "3" 
    "last_active" => string(4) "3000" 
    "login" => string(5) "user3" 
    "ip" => string(13) "192.168.10.30" 
) 
array(4) (
    "id" => string(1) "2" 
    "last_active" => string(4) "2000" 
    "login" => string(5) "user2" 
    "ip" => string(13) "192.168.10.20" 
) 
array(4) (
    "id" => string(1) "1" 
    "last_active" => string(4) "1000" 
    "login" => string(5) "user1" 
    "ip" => string(13) "192.168.10.10" 
) 

, 나는 별개의 IP를 가지고 last_active 값이 올바르지 않습니다. 아이디어가 있으십니까? 순수 SQL 문 또는 DB :: 선택() 대답은 OK :-)에게

+0

내가 당신이 ORM –

답변

0

방법에 대한

select id, last_active, login, ip 
from activities 
where (last_active, ip) in (select max(last_active), ip from activities group by ip) 
+0

작품에서 그것을 구현하는 방법에 대한 확실하지 않은 순수 SQL 문을 줄 수 있습니다! 고맙습니다. 이제 Kohana ORM 또는 DB 쿼리 작성기로 변환하는 방법을 알아 내야합니다. – piterek

+0

질문에 순수한 SQL이 좋다고했습니다. ORM에 필요하면 도와 드릴 수 없습니다 : / – Argod

0

사용 DB::expr()입니다. 다음과 같은 뭔가 작업을해야합니다 :

ORM::factory('Activity') 
    ->where(
     DB::expr(
      '`last_active`,`ip`' 
     ), 
     'IN', 
     DB::expr(
      'select max(`last_active`), `ip` from `activities` group by `ip`' 
     ) 
    ->find_all();