我有一个带有记录的表,并且有一个名为的行category。我插入了太多文章,并且我只希望从每个类别中选择两篇文章。
category
我试图做这样的事情:
我创建了一个视图:
CREATE VIEW limitrows AS SELECT * FROM tbl_artikujt ORDER BY articleid DESC LIMIT 2
然后我创建了这个查询:
SELECT * FROM tbl_artikujt WHERE artikullid IN ( SELECT artikullid FROM limitrows ORDER BY category DESC ) ORDER BY category DESC;
但这不起作用,只给我两个记录吗?
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
如果不进行更改SELECT x.*,则结果集将包含rank和var_category值-如果不是这种情况,则必须指定您真正想要的列。
SELECT x.*
rank
var_category