我有一个包含用户发布的文章的表格。表格的结构如下:
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中运行几个查询,但我无法弄清楚,有人可以帮忙吗?
答案 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并没有真正设置为执行这样的查询。