2011-06-12 3 views
0

다음 두 개의 표가 있습니다.주문 결과 발생 빈도

BookmarkTag (BookmarkID, TagID) 태그 (TagID, 제목)

현재 내가 적절한 BookmarkID 모든 태그를 선택하고있다. 문제는 결과에서 중복을 피하기 위해 태그를 한 번만 선택하고 발생하는 태그를 다시 가져 오는 것입니다.

이 내 현재 SQL 쿼리입니다 :

SELECT Tag.Title 
FROM `Tag` INNER JOIN BookmarkTag 
WHERE BookmarkTag.BookmarkID = 1 AND Tag.TagID = BookmarkTag.TagID' 

답변

3

당신은 JOIN 키워드 후 ON 절에 조인 조건을 넣어해야합니다. where 절에이 없습니다.
SQL92를 SQL92 구문과 혼합했습니다. 이것은 내가 테스트하지 않은 채로 작동 할 수도 있지만 이것은 더 빠릅니다. 태그 당 결과 고유하게하기 위해

SELECT Tag.Title 
FROM `Tag` t 
INNER JOIN BookmarkTag b ON (t.tagid = b.tagid) 
WHERE B.BookmarkID = 1 
GROUP BY t.tagid 
ORDER BY count(*) DESC 

, tagid에 group by을한다.
그런 다음 카운트 (*)를 사용하여 발생 빈도가 가장 높은 태그가 맨 위에 오도록 확인하여 order by 번 발생시킬 수 있습니다.
(이 count(afield)보다 빠른 때문에 항상 count(*)를 사용하려고)

+0

다음과 같은 오류가 발생합니다. # 1052 - 그룹 문에서 'tagid'열이 모호합니다. – ritch

+0

감사합니다. – ritch

1
SELECT t.Title, COUNT(*) AS TitleCount 
FROM BookmarkTag AS bt 
INNER JOIN Tag AS t ON t.TagID = bt.TagID 
GROUP BY t.Title 
ORDER BY TitleCount DESC 

당신은, 7 개 가장 인기있는 타이틀을 얻을 쿼리의 끝, 또는 다른 번호로 LIMIT 7를 추가합니다. 내 버전은 인기가 내림차순으로 모두 생성됩니다.