2012-06-22 3 views
1

받은 편지함에 최신 5 개의 메시지를 보내고 싶습니다. 내가 이것을 사용하는 데 필요한 5 개 최신 ID를 얻으려면 :mysql : variables/subqueries를 사용한 고급 쿼리?

SELECT 
    MAX(id) 
FROM 
    samtaler 
WHERE 
    brukerid_mottaker = 1 
GROUP BY brukerid_avsender 
ORDER BY id DESC 
LIMIT 5 

이 내가 필요로하는 올바른 ID 년대를 반환합니다. 그러나 동일한 쿼리에서 동일한 테이블에서 데이터를 선택하려고합니다. 위의 쿼리에서 반환 된 ID를 가진 행입니다. 왜이 작업 밤은

select 
    p2.title, 
    p2.message, 
    @a:=max(p1.id) 
from 
    samtaler p1 
    join samtaler p2 
    on (@a = p2.id) 
where 
    p2.brukerid_mottaker = 1 
group by p2.brukerid_avsender 
order by p2.id DESC 
limit 5 

:

나는 몇 가지 변수와 자체 조인하지만 행운을 시도?

이것은 데이터베이스의 현재 데이터입니다 : http://i47.tinypic.com/2hpsjv9.png 이 경우 행 13 및 4로 돌아가고 싶습니다. 영어는 유감 스럽습니다.

답변

1

일반 자체 조인 대신 하위 쿼리에 조인하십시오. LIMITIN() 안에 사용할 수 없기 때문에 IN() 절이 작동하지 않습니다. 그래도 조인 된 하위 쿼리에서 작동해야합니다.

SELECT 
    p1.title, 
    p1.message, 
    p2.id 
FROM 
    samtaler p1 
    JOIN (
    SELECT MAX(id) AS id 
    FROM 
     samtaler 
    WHERE 
     brukerid_mottaker = 1 
    GROUP BY brukerid_avsender 
    ORDER BY id DESC 
    LIMIT 5 
) p2 ON p1.id = p2.id 

이 방법을 사용하면 변수가 필요 없습니다.

+0

감사합니다. 그것은 작동합니다 :) – medusa1414