MySql查询:从表中为每个类别选择前3行

AXh*_*ini 12 mysql view limit

我有一个记录表,它有一行调用category.我插入了太多文章,我想从每个类别中只选择两篇文章.

我试着这样做:

我创建了一个视图:

CREATE VIEW limitrows AS 
   SELECT * FROM tbl_artikujt ORDER BY articleid DESC LIMIT 2 
Run Code Online (Sandbox Code Playgroud)

然后我创建了这个查询:

SELECT * 
FROM tbl_artikujt 
WHERE 
   artikullid IN
   (
      SELECT artikullid
      FROM limitrows
      ORDER BY category DESC
   )
ORDER BY category DESC;
Run Code Online (Sandbox Code Playgroud)

但这不起作用,只给我两个记录?

OMG*_*ies 11

LIMIT仅停止语句返回的结果数.您正在寻找的通常称为分析/窗口/排名功能 - 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
Run Code Online (Sandbox Code Playgroud)

如果不进行更改SELECT x.*,结果集将包含rankvar_category值 - 如果不是这种情况,则必须指定您真正想要的列.