最后5条评论x文章用mysql查询

时间:2014-03-01 14:50:09

标签: mysql select group-by distinct

我有3张桌子:

-categories(-categories not important)

-articles

-comments


示例:

-articles 我有10000多篇文章

-comments 我对随机-articles有超过10000条评论


- 我试图显示“最后5条评论

OF articles.article_id s = in(1,2,3,4,5)

使用订购comments.comment_id desc

WITH categories.category_id,categories.category_name

-SQL-QUERY-1:

select 
comments.comment_id,comments.comment_title,comments.article_id, 
articles.article_id,articles.article_title,articles.category_id, 
categories.category_id,categories.category_name from comments 
left join (articles,categories) on (comments.article_id=articles.article_id and articles.category_id=categories.category_id) 
where (comments.article_id in(1,2,3,4,5)) 
ORDER BY `comments`.`comment_id`  DESC limit 0 , 5

请关注comments_idarticle_id

result 1

如你所见;

  • comments.comment_id desc order +确定

109

108

107

106

105

comments.article_id s +确定

1 - 2 - 3 - 4 - 5

结果列表显示每篇文章的** 2条评论 **

- 我需要“分组”文章.article_id s

所以我通过comments.article_id“

添加”组

-SQL-QUERY-2:

select 
comments.comment_id,comments.comment_title,comments.article_id, 
articles.article_id,articles.article_title,articles.category_id, 
categories.category_id,categories.category_name from comments 
left join (articles,categories) on (comments.article_id=articles.article_id and articles.category_id=categories.category_id) 
where (comments.article_id in(1,2,3,4,5)) 
/*for duplicate comments*/ GROUP by comments.article_id /*for duplicate comments*/
ORDER BY `comments`.`comment_id`  DESC limit 0 , 5

请关注comments_idarticle_id

-sql-2:http://sqlfiddle.com/#!2/3ab6c1/2

result 2

没关系, comments.article_id已分组“comments.comment_id desc”订单已损坏;

108

106

104

102

100

(必须 109 106 104 102 100


我不是mysql的专家(我失去了超过3-4个小时)


- 我需要在每个类别列表页面中显示:“ last(desc)5条评论”。

- 我需要显示:“最后(desc)”1“评论(1,2,3,4,5 article_id s)中的每篇文章


(distinct和max显示相同的结果108 106 104 102 100

如果我添加group by comments.article_id并删除order by comments.comment_id desc,则该列表会显示文章的第1条评论 - 我需要显示文章的最后一条评论

任何sql专家都可以帮我解决这个SQL查询吗?

2 个答案:

答案 0 :(得分:0)

这有用吗......

 SELECT x.*
      , COUNT(*) rank
   FROM comments x
   JOIN comments y 
     ON y.article_id = x.article_id
    AND y.comment_id <= x.comment_id
  GROUP
     BY article_id
      , comment_id;

答案 1 :(得分:0)

假设您要显示5篇特定文章的最后5条评论,每篇文章一条评论:

select     c.comment_id, c.comment_title, c.article_id, 
           a.article_id, a.article_title, a.category_id, cats.category_name
from       articles      a
inner join categories cats on (a.category_id = cats.category_id)
inner join (select   article_id, max(comment_id) comment_id, comment_title
            from     comments co
            where    co.article_id in (1, 2, 3, 4, 5)
            group by co.article_id) c
            on (a.article_id = c.article_id)
order by    c.comment_id desc

http://sqlfiddle.com/#!2/3ab6c1/27