2012-07-04 4 views
0

테이블이 있는데 일정한 수의 임의 항목을 검색하려고하는데 특정 범주의 항목을 최대한 많이 넣으려고합니다. 특정 카테고리의 다른 카테고리가 뒤 따르는 상위.특정 범주의 제한이있는 임의의 N 레코드 선택 (다음 롤오버가없는 경우)

첫 번째 범주에 항목이없는 경우 두 번째 범주의 항목 수에 허용되는 항목 항목 수가 추가됩니다.

예를 들어, 내 테이블에는 3 개의 카테고리 (카테고리 : '완료', '부분', '비어 있음')가 있습니다. 총 12 개의 항목을 표시하고 싶습니다.

"완료"카테고리의 경우 8을 표시하고 3 개의 부분을 표시하고 마지막으로 1 개의 비어있는 부분을 표시합니다.

완료가 8 개 미만인 경우 5가 있다고하면 5 개의 완료, 6 개의 부분 및 1 개의 비어 있음을 표시합니다. (누락 된 3 완료, 그래서 3 기본 부분 + 3 추가 하나 = 6).

쿼리를 수행하려면 어떻게해야합니까?

SELECT * 
FROM items 
ORDER BY category='complete' DESC, category='partial' DESC, category DESC, RAND() ASC 
LIMIT 12 

위의 질의에 대한 문제는 12 완료를 얻고 그것은 내가 찾고 있어요 정확히되지 않는 것입니다 : 여기

내가 실제로 가지고있는 쿼리입니다.

답변

0

USION DISTINCT 문을 사용할 수 있습니다.

다음과 같이하십시오 :

(SELECT * FROM items WHERE category = "complete" LIMIT 8) 
UNION DISTINCT (SELECT * FROM items WHERE category = "partial" LIMIT 3) 
UNION DISTINCT (SELECT * FROM items WHERE category = "" LIMIT 1) 
+0

예, 미만 8 완료가 무엇인가, 그것은 다음 카테고리로 이월하지 않을 것입니다. 항상 12 개의 레코드가 표시되도록 노력하고 있습니다. –

+0

흠, 네가 db에 12 개 미만의 레코드를 가지고 있다면 실제로는 그렇지 않을 것이라고 짐작한다. –

+0

그렇지 않다. DB에 12 개 이상의 레코드가 있지만 "완료"카테고리에는 8 개가 필요하지 않습니다. –

관련 문제