从 MySql 中的每个类别中选择前 3 行
在一个包含大量记录和一个类别列的表中,任务是检索仅每个类别的前两篇文章。为了实现此目的,用户最初尝试创建视图 limitrows,将检索的行数限制为每个类别两行。然而,这种方法被证明是不够的。
理解分析函数
想要的结果需要使用分析/窗口/排名函数。这些 MySQL 本身不支持的函数可以使用变量进行近似。
模拟分析函数
以下代码模拟分析函数:
SELECT x.* FROM (SELECT t.*, CASE WHEN @category != t.category THEN @rownum := 1 ELSE @rownum := @rownum + 1 END AS rank, @category := t.category AS var_category FROM TBL_ARTIKUJT t JOIN (SELECT @rownum := NULL, @category := '') r ORDER BY t.category) x WHERE x.rank <= 3
变量@rownum和@category分别用于跟踪行号和当前类别。通过使用这些变量,确定每一行在其类别中的排名,并选择排名前 3 名的行。
自定义结果集
以确保仅返回所需的列,在 SELECT 语句中指定所需的列,如下所示:
SELECT x.articleid, x.title FROM (SELECT t.*, CASE WHEN @category != t.category THEN @rownum := 1 ELSE @rownum := @rownum + 1 END AS rank, @category := t.category AS var_category FROM TBL_ARTIKUJT t JOIN (SELECT @rownum := NULL, @category := '') r ORDER BY t.category) x WHERE x.rank <= 3
以上是如何在不使用分析函数的情况下获取 MySQL 中每个类别的前 3 行?的详细内容。更多信息请关注PHP中文网其他相关文章!