MySQL 查询:从表中的每个类别中选择前 3 行
在这种情况下,您有一个包含大量记录的表,按类别分类。您的目标是仅检索每个类别中的前三篇文章。当您尝试使用视图和 LIMIT 的解决方案时,它导致记录数量有限。
为了应对这一挑战,有必要利用 MySQL 所缺乏的分析函数。但是,您可以使用变量实现类似的效果:
<code class="sql">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</code>
此查询使用变量 @rownum 和 @category 来跟踪类别内的行排名。它首先将两个变量设置为 NULL/空值。
对于表中的每一行(别名为“t”),它检查当前类别是否与前一个类别不同。如果是,则将 1 分配给 @rownum;否则,它会将 @rownum 加 1。同时,它将当前类别分配给 @category,以维护后续行中比较的上下文。
结果是一个临时表,对类别中的每一行进行排名。然后,最后的 WHERE 子句会过滤此临时表,以仅显示排名为 3 或更低的行。
请记住调整外部 SELECT 子句 (x.*) 中的列引用以匹配您想要的列检索。
以上是如何在不使用分析函数的情况下从 MySQL 表中的每个类别中选择前 3 行?的详细内容。更多信息请关注PHP中文网其他相关文章!