使用mysql查询x文章的最后5条注释

使用mysql查询x文章的最后5条注释,mysql,select,group-by,distinct,Mysql,Select,Group By,Distinct,我有三张桌子: -类别-类别不重要 -文章 -评论 例如: -文章 我有10000多篇文章 -评论 我有10000+的评论随机文章 -我试图展示最后5条评论 OF articles.article_id s=in1、2、3、4、5 按注释排序。注释\u id描述 带有categories.category\u id、categories.category\u name -SQL-QUERY-1: 请关注评论和文章id列 sql-1: 如你所见 comments.comment\u id desc

我有三张桌子:

-类别-类别不重要

-文章

-评论

例如:

-文章 我有10000多篇文章

-评论 我有10000+的评论随机文章

-我试图展示最后5条评论

OF articles.article_id s=in1、2、3、4、5

按注释排序。注释\u id描述

带有categories.category\u id、categories.category\u name

-SQL-QUERY-1:

请关注评论和文章id列

sql-1: 如你所见

comments.comment\u id desc order+OK 109

108

107

106

105

comments.article_id s+OK

1-2-3-4-5

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

-我需要对文章进行分组。文章id

所以我添加了groupby comments.article\u id

-SQL-QUERY-2:

请关注评论和文章id列

-sql-2:

没关系,comments.article\u id已分组,但comments.comment\u id desc顺序已中断

108

106

104

102

一百

必须是109 106 104 102 100

我不是mysqlI的专家,我损失了3-4个多小时

-我需要显示:lastdesc 5评论在每个类别的列表页面

-我需要为1,2,3,4,5个文章id中的每一篇文章显示:lastdesc 1条注释

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

如果我添加groupbycomments.article\u id并删除orderbycomments.comment\u id desc,列表将显示文章的前1条评论-我需要显示文章的最后1条评论


任何sql专家都能帮我完成这个sql查询吗?

这有帮助吗

 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;

假设您想显示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

为什么您的数据模型有两个标题相同的不同注释?我希望我理解您的意思-每一篇文章都是唯一的,每一条注释都是唯一的。我将示例数据放在第1篇文章中,其中有两条标题相同的注释。在注释值100,1中插入“注释标题1”;在注释值101、1中插入“注释标题1”;是,但其示例数据:articles、comments、categories表id列是唯一的-有些文章有100多条评论,有些文章有0条评论,我想显示x category的最后5条评论和x article comments的最后一条评论如果文章有commentso,你想显示5篇特定文章的最后5条评论,每篇文章一条评论?与类别有什么联系?这是一个解决方案?OP已经接受了,所以我想一定是。-科里安德-谢谢-草莓-是的,这个查询显示了我想要的东西,但对我来说又长又复杂,我需要简单又短的方法,也许我会用两个不同的查询来完成。
 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;
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