首页 > 解决方案 > 如何显示每个类别中查看次数最多的帖子?

问题描述

首先,我不将此代码用于 wordpress 网站,我希望将其代码放入我自己的网站。所以现在我有问题,我想显示每个类别中浏览次数最多的帖子,

我有桌子 => 帖子

     content || category || views
   -------------------------------
     text 1   |  cat1    |  700
     text 2   |  cat2    |  900  <==== most views in cat 2
     text 3   |  cat2    |  900
     text 4   |  cat1    |  900  <==== most views in cat 1
     text 5   |  cat1    |  800
     text 6   |  cat2    |  800
     text 7   |  cat3    |  700  <==== most views in cat 3
     text 8   |  cat2    |  900
     text 9   |  cat3    |  100
     text10   |  cat1    |  100

我想要这样的输出:

    content || category || views
   -------------------------------
     text 4   |  cat1    |  900
     text 2   |  cat2    |  900
     text 7   |  cat3    |  700

标签: mysqlsql

解决方案


将您的表加入到GROUP BY子查询中,该子查询会为每个类别找到最受欢迎的帖子:

SELECT t1.*
FROM yourTable t1
INNER JOIN
(
    SELECT category, MAX(views) AS max_views
    FROM yourTable
    GROUP BY category
) t2
    ON t1.category = t2.category AND t1.views = t2.max_views;

如果给定类别可能有多个帖子与相同数量的视图相关联,那么理想情况下,您应该为我们提供如何打破平局的逻辑。在这种情况下,上述查询将返回所有已绑定的帖子。

如果您使用的是 MySQL 8+,那么我们可以使用ROW_NUMBER(或者可能是一个RANK函数):

SELECT
    content, category, views
FROM
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY category ORDER BY views DESC) rn
    FROM yourTable
) t
WHERE rn = 1;

推荐阅读