2010-02-05 4 views
3

SQL에서 가능할 지 모르겠다. 정수 ID가있는 내용과 각각 "On"이라는 두 개의 테이블이 있는데, 그것이있는 내용을 나타내는 필드. 나는 "On"필드에 몇 개의 주석이 들어 있는지 순서대로 내용을 받고 싶습니다. SQL이 그것을 할 수 있기를 바랬습니다.가장 인기있는 내용으로 정렬 할 SQL 함수

+1

테이블 구조를 자신의 단어로 설명하는 대신 게시 할 수 있습니까? MySQL의 경우 : SHOW CREATE TABLE yourtablename; –

답변

5
SELECT comment.on AS content_id, COUNT(comment_id) AS num_comments 
FROM  comments 
GROUP BY content_id 
ORDER BY num_comments DESC 

당신은 내용의 모든 필드가 필요하면, 당신은 가입 할 수 있습니다

SELECT contents.*, COUNT(comment_id) AS num_comments 
FROM  contents 
    LEFT JOIN comments on contents.content_id = comments.on 
GROUP BY content_id 
ORDER BY num_comments DESC 
0
select c.id, count(cmt.*) as cnt 
    from Content c, Comment cmt 
where c.id = cmt.id 
order by cnt 
group by c.id, 
0

이의 당신의 테이블 (나는 의사-SQL에 쓴 다음과 같이 가정 해 봅시다 - 구문을 사용중인 데이터베이스에 따라 다를 수 있음). 제공 한 설명에서 테이블에 어떻게 참여하고 있는지 명확하지 않습니다.

다음
CREATE TABLE [dbo].[Content] (
    [ContentID] [int] NOT NULL, 
    [ContentText] [varchar](50) NOT NULL 
) 

CREATE TABLE [dbo].[ContentComments] (
    [ContentCommentID] [int] NOT NULL, 
    [ContentCommentText] [varchar](50) NOT NULL, 
    [ContentID] [int] NOT NULL 
) 

ALTER TABLE [dbo].[ContentComments] WITH CHECK ADD CONSTRAINT 
[FK_ContentComments_Content] FOREIGN KEY([ContentID]) 
REFERENCES [dbo].[Content] ([ContentID]) 

는 내용이 번호를 기준으로 정렬 얻을 귀하의 질의에 다음과 같이 쓸 수있다 : 그럼에도 불구하고, 나는 그것이 (모든 기본 키, 인덱스, 등 누락 된주의와) 같은 것을 보이는 생각 각 콘텐츠에는 댓글이 있습니다. DESC는 가장 많은 코멘트가있는 컨텐츠 항목을 가장 적은 코멘트가있는 컨텐츠 항목으로 정렬합니다.

SELECT Content.ContentID, COUNT(ContentComments.ContentCommentID) AS CommentCount 
FROM Content 
INNER JOIN ContentComments 
ON Content.ContentID = ContentComments.ContentID 
GROUP BY Content.ContentID 
ORDER BY COUNT(ContentComments.ContentCommentID) DESC 
관련 문제