如何根据本文的观看次数显示特定用户的文章?

时间:2012-03-28 14:13:37

标签: php mysql

我有一个包含用户发布的文章的表格。表格的结构如下:

id      uid       author       article_name     article     num_views      edit_time

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

我需要的是根据uid

显示浏览次数最多的文章

简而言之,如果 uid author id article id { {1}} ,我需要的是显示如下内容:

5

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

3 个答案:

答案 0 :(得分:2)

每个用户观看次数最多的文章及其计数:

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>

答案 1 :(得分:1)

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

SELECT * FROM ARTICLES WHERE(某些标准)ORDER BY NUM_VIEWS DESC LIMIT 1。

那应该选择一个视图最多的文章。

答案 2 :(得分: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'd字段中的第一个元素。

另一种方法是使用带有子查询的连接,但如果同一用户的两篇文章具有相同的最大视图数,并且还存在性能问题,则可能会很奇怪:

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并没有真正设置为执行这样的查询。