我有三张桌子:
-categories (-categories不重要)
-articles
-comments
示例:
-articles I‘s 10000+文章
-comments I有随机-articles的10000+注释
-我想给大家看“最后5条评论”(last 5 comments)
articles.article_id s= in(1,2,3,4,5)
使用命令comments.comment_id desc
与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_id和article_id列

如你所见;
109
108
107
106
105
comments.article_id s +OK
1-2-3-4-5
但是结果列表显示了每一篇文章的**2个注释
-I需要“分组”articles.article_id的
所以我添加了“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_id和article_id列
-sql-2:http://sqlfiddle.com/#!2/3ab6c1/2

没关系,comments.article_id的分组,但"comments.comment_id desc"顺序被打破;
108
106
104
102
100
(必须是109 106 104 102 100)
我不是mysql的专家(我损失了3-4个小时)
-I需要在每个类别列表页面中显示:"last(desc) 5注释“。
-I需要显示:对于(1,2,3,4,5 article_id )中的每一篇文章,"last(desc)“"1”注释
(distinct和max显示相同的结果108 106 104 102 100
如果我添加group by comments.article_id并删除order by comments.comment_id desc,列表将显示文章的前1条注释--我需要显示文章的最后1条注释)
有任何sql专家可以帮助我进行这个sql查询吗?
发布于 2014-03-01 22:39:51
假设您想显示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 deschttp://sqlfiddle.com/#!2/3ab6c1/27
发布于 2014-03-01 15:18:56
这有帮助吗..。
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;https://stackoverflow.com/questions/22115823
复制相似问题