2012-12-24 2 views
2

두 테이블이 있습니다. 하나는 Tags이고, 다른 하나는 many-to-many 관계로 Posts_Tags입니다. Posts_Tags에는 postidtagid의 두 열이 있습니다. Tags 데이터베이스에는 id 열이 있는데, 이는 조인트 테이블의 tagid에 해당합니다.태그를 사용하는 게시물 수로 정렬 하시겠습니까?

사용자에게 표시 할 태그 이름의 목록을 사용 횟수 순으로 정렬하고 싶습니다. 이 정보를 사용하여, 나는 함께 두 개의 테이블을 조인하는 쿼리 구성했습니다

SELECT Tags.name FROM `Tags` LEFT JOIN `Posts_Tags` ON Tags.id = Posts_Tags.tagid 

를이 나에게 태그 이름의 목록을 가져옵니다,하지만 분명히을, 그것은 단지에서 순수하게 데이터를 선택하는 것보다 훨씬 더 많은 일을하지 않습니다 Tags 테이블. 나는 ORDER BY 절을 어딘가에 추가 할 필요가 있다는 것을 알고있다. (아마도 GROUP BY이지만 쿼리를 어떻게 구성하는지 모르겠다.)

결과를 각 게시물의 개수로 성공적으로 정렬하려면이 쿼리에 무엇을 추가해야 하는가? 태그에 사용되는?

답변

2

사용 Group By는 각 태그를 사용하는 횟수를 계산하기 위해.이. 대신 ID를 그룹화 할 수 있습니다하지 않을 경우 태그의 이름, 고유 가정

Select 
    t.Name, 
    Count(*) as TagUse 
From 
    Tags t 
    Left Join 
    Post_Tags p 
    On t.Id = p.TagID 
Group By 
    t.Name 
Order By 
    TagUse Desc 
+2

+1하지만 FWIW는 별칭과 별칭으로 별칭을 부여하는 것이 좋습니다. ORDER BY * ordinal *은 더 이상 사용되지 않는 SQL 구문입니다. –

+0

@BillKarwin 귀하의 조언에 감사드립니다. 감사드립니다. – Laurence

2

하나의 태그를 게시물에 한 번만 사용할 수 있다고 가정하면 다음을 수행 할 수 있습니다.

SELECT Tags.ID, Tags.name, count(*) as NumPosts 
FROM Tags 
    LEFT JOIN Posts_Tags ON Tags.id = Posts_Tags.tagid 
Group by Tags.ID, Tags.name 
Order by 3 desc 
관련 문제