2011-09-22 4 views
1

이 주제에 대해 몇 가지 검색을 수행했지만 해결책이 아닌 것으로 보이는 것이 제 요구 사항과 약간 다를 수 있습니다.mysql 제한 조인

기본적으로 나는 "content"테이블과 "file_screenshots"테이블을 가지고 있습니다. 'file_screenshots'표의 각 행에는 'screenshot_content_id'열이 있습니다. "content"테이블에서 선택하고 "file_screenshots"테이블에 가입하되 모든 단일 컨텐츠에 대해 최대 5 개의 스크린 샷 만 선택하고 싶습니다.

이것이 가능하지 않은 경우 두 가지 검색어를 사용해도 행복하지만 다시 한 번 콘텐츠 당 5 개의 스크린 샷만 수신하도록 제한하는 방법을 모르겠습니다. 여기

이 예제 쿼리입니다 :

SELECT * FROM content 
LEFT JOIN file_screenshots 
ON file_screenshots.screenshot_content_id = content.content_id 
WHERE content_type_id = 4 
+1

확인이 질문 : http://stackoverflow.com/questions/1042481/mysql-join-with-limit –

+0

그리고이 : http://stackoverflow.com/questions/1442527/how-to-select 카테고리 당 최신 4 개 아이템 –

+0

링크를 환호하지만 내 답변에 제공된 예제를 직접 사용하는 방법을 볼 수는 없습니다. 두 번째 것은 하나의 스크린 샷에 대한 추가 열이있는 모든 콘텐츠의 목록을 반환하며 (각 콘텐츠에 대해 5 행이 아닌) 내 자신의 예제에 대한 첫 번째 링크를 다시 작성하는 방법을 정확하게 알 수는 없습니다 조금도. – robjbrain

답변

2

당신이 당신의 file_screenshots 테이블의 고유 ID 컬럼의 일종을 가지고 가정하면, 이것은 당신을 위해 작동합니다 :

SELECT 
    c.*, 
    fs.* 
FROM 
    content c 
JOIN 
    file_screenshots fs 
    ON (fs.screenshot_content_id = c.content_id) 
LEFT JOIN 
    file_screenshots fs2 
    ON (fs2.screenshot_content_id = c.content_id AND fs2.id < fs.id) 
GROUP BY 
    fs.id 
HAVING 
    COUNT(*) < 5 
ORDER BY c.content_id, fs.id 

나는 ID라는 이름의 한 열 id. 필요한 경우 이름을 변경하십시오.

ID가 가장 큰 5 개의 스크린 샷을 원할 경우 fs2.id와 fs.id 비교를 역으로 수행하십시오.

ON (fs2.screenshot_content_id = c.content_id AND fs2.id > fs.id) 
+0

정말 잘 작동하는 건, 내가 예상 할 수있는 유일한 문제는 왼쪽 가입을 사용하더라도 스크린 샷이 없으면 작동하지 않는다는 것입니다. 지금 당장은 문제가 아니지만 이것을 읽는 다른 누구에게나 알려야합니다 :) – robjbrain

+0

@FreezeDriedPop 첫 번째'JOIN'을'LEFT JOIN'으로 바꾸고'content'에서' 'file_screenshots'의 대응하는 행 –