2012-05-22 4 views
6

나는 here로 논리를 복제하려고합니다. 그러나, 나는 조인이있을 때 어떤 운도 가지지 않고있다. 다음은 내 쿼리의 최소화 된 버전입니다 : 요컨대그룹당 JOIN으로

SELECT resources.title, catRel.catRef 
FROM resources 
LEFT JOIN placesRel ON placesRel.refId = resId 
LEFT JOIN catRel ON refId = resId 
WHERE ... 

, 나는 카테고리 ID를 포함하는 목록을 받고 있어요 내가 범주 이상이면 N 결과를 가지고 결과를 제한하려면, 예를 들어 catRef 당 두 개의 결과 만 표시하십시오.

title    catRef 
Swizz Gubbinz  1 
Runcible Spoons 1 
Peter Pan DVD  2 
Button Moon  2 
Monkey Alan  3 
Bilge Pump  3 
+0

WHAT catRef <= 2'? – eggyal

+0

자원의 제목과 catRef 둘 다 있습니까? –

+0

나는 좀 더 구체적으로 스레드를 업데이트했습니다. 출력 예제에서 catRef = 2를 찾고 있다고 제안했습니다. title은 리소스에 있고 catRef는 catRel에 있습니다. –

답변

2

조인 내 하위 쿼리 사용 방법은 어떻습니까? 내가 MySQL의에서 윈도우 기능의 부족에서

SELECT resources.title, catRel.catRef 
FROM resources 
LEFT JOIN placesRel ON placesRel.refId = resId 
LEFT JOIN catRel as cr1 ON cr1.catRel.primaryKey in (select cr2.primaryKey from catRel as cr2 where cr2.refID = resId Limit 0,2) 
WHERE ... 
+1

은 테스트하지 않았지만 서브 쿼리의 "order by"절을 사용하여 시도해 보았습니다. – ErichBSchulz

0

..... 테이블 REFID와 잔 유가에 속한 확실 아니었지만, 대답은 사소한 없습니다. 다음은 MySQL의 GROUP_CONCAT : MySQL: Selecting Top N Records Per Group을 활용하여 그룹당 상위 N 개의 레코드를 선택하는 트릭입니다.

집계 함수이므로 GROUP_CONCAT을 조작하여 원하는 순서로 연결된 문자열을 제공 할 수 있습니다. 텍스트 조작을 사용하면 문자열이 구문 분석됩니다. 선택적으로, 값은 적절한 유형으로 3 스트됩니다.

관련 문제