如何根据文章的浏览量显示特定用户的文章


How can I display the article of a specific user according to the number of views of this article?

我有一个包含用户发布的文章的表格。表的结构是这样的:

id      uid       author       article_name     article     num_views      edit_time

id是文章 ID,uid是作者 ID,num_views是这篇文章被查看的次数。

我需要的是仅显示根据uid查看次数最多的文章

简而言之,如果uidauthor id并且article id 5 ,我需要的是显示类似以下内容:

id     uid     article_name     num_views 
5       1      article title       100

我尝试在Mysql中运行几个查询,但我无法弄清楚,任何人都可以帮忙吗?

每个

用户查看次数最多的文章及其计数:

SELECT `id`, `uid`, `article_name`, `num_views` 
FROM `table` 
WHERE `num_views` IN ( 
    SELECT MAX(`num_views`) FROM table GROUP BY `uid`)

仅对于给定的 uid

SELECT `id`, `article_name`, MAX(`num_views`) 
FROM `table` 
WHERE `uid` = <user id>

如果您只需要一个条目,则应尝试使用 ORDER BY 命令对查询进行排序,并将其限制为按 LIMIT 1 命令撰写一篇文章。

从文章中选择 *,其中(某些条件(按NUM_VIEWS描述限制 1 排序。

这应该选择具有最多浏览量的文章。

这有点笨拙,如果你的桌子变大了,它就会不性能,但一种方法是:

select uid,
group_concat(id order by num_views desc) as most_viewed_id,
group_concat(article_name order by num_views desc) as most_viewed_name,
group_concat(num_views order by num_views desc) as num_views
from yourtable group by uid

然后,您必须从每个group_concat字段中解析出第一个元素。

另一种方法是将联接与子查询一起使用,但如果同一用户有两篇文章具有相同的最高查看次数,并且还存在性能问题,则可能会很奇怪:

select uid,num_views,id,article,article_name from 
yourtable join 
(select uid,max(num_views) as maxviews from yourtable group by uid) as subtable
using (uid,num_views)

当然,在某个时候,最好的方法可能是通过简单的查询顺序迭代 uid。查询更多,但根据您的数据,它可以更快。不幸的是,SQL并没有真正设置为执行这样的查询。