2011-04-21 5 views
2

2 개의 테이블이 있고 하나는 범주가 있고 다른 하나에는 고유 한 항목이 있습니다.JOIN 쿼리를 각 유형별로 5 개로 제한

내가하고 싶은 것은 예를 들어, ITEM_ID 및 CAT_ID 을 선택하고 각 범주에 대해 5 결과를 제한하는 것입니다 :

cat_id item_id 
1  1 
1  2 
1  3 
1  4 
2  5 
2  6 
3  7 

등 ... 가장 가까운 쿼리는 내가 왔어요 위로 내가 CAT_ID에 의해 그룹을 변경하는 경우 그러나 나는 ...의 말을 수 있도록 2 카운트를 변경하려는 경우, 그것은, 그것을 나에게 동일한 결과를 제공하고, 유래에 발견하는 내용입니다

SELECT cat.cat_id, cat.cat_name, item_id, item_author, item_name, item_pic_big 
FROM item_table ipt 
JOIN cat_table cat ON ipt.cat_id = cat.cat_id 
GROUP BY item_id 
HAVING COUNT(*) < 5 
ORDER BY cat.cat_id 

오직 나에게 1 개의 결과를 준다.

어떤 도움이

답변

2

을 감상 할 수있다 당신이 실제로 필요한 것은 같은 :

This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' 
: 당신이 이것을 실행하려고하면

SELECT 
cat.cat_id, cat.cat_name, item_id, item_author, item_name, item_pic_big 
FROM item_table a 
JOIN cat_table b ON a.cat_id = b.cat_id 
WHERE a.item_id IN (SELECT item_id 
        FROM item_table 
        WHERE cat_id = b.cat_id 
        LIMIT 5) 
GROUP BY a.item_id 
ORDER BY b.cat_id 

불행하게도, 당신이 실망 오류 메시지가 표시됩니다

해결 방법이 필요합니다. 현재 가능한 해결 방법의 목록을 볼 수 있습니다 : http://www.artfulsoftware.com/infotree/queries.php#104

편집 :가 첫 번째 솔루션은 다음과 같이 당신의 구조로 변환 할 수 있습니다 (나는 테이블을 가지고 있지 않기 때문에 약간의 열 이름이있을 수 있습니다 문제)

SELECT temp2.cat_id, temp2.item_id, 
     temp2.cat_name, temp2.item_author, 
     temp2.item_name, temp2.item_pic_big 
FROM 
    (SELECT 
      temp.cat_id, 
      temp.item_id, 
      temp.cat_name, 
      temp.item_author, 
      temp.item_name, 
      temp.item_pic_big, 
      IF(@prev <> temp.cat_id, @rownum := 1, @rownum := @rownum+1) AS rank, 
      @prev := temp.cat_id 
    FROM (SELECT 
     a.item_id, 
     b.cat_id, 
     b.cat_name, 
     a.item_author, 
     a.item_name, 
     a.item_pic_big 
     FROM item_table a 
     JOIN cat_table b ON a.cat_id = b.cat_id 
     ORDER BY cat_id, item_id) AS temp 
    JOIN (SELECT @rownum := NULL, @prev := 0) AS r 
    ORDER BY temp.cat_id, temp.item_id) as temp2 
WHERE temp2.rank <= 5 
ORDER BY temp2.cat_id, temp2.item_id; 
+0

복잡한 ... ... 감사합니다 –

+0

@Itai - Ein Be'aya :) – Galz

관련 문제