我有一个包含博客文章的数据库表。我想在首页上显示每个类别的一则(或更多)帖子,例如按日期排序。
所以我的posts表看起来像这样: id | title | description | cat | filename | date
id | title | description | cat | filename | date
我将如何创建这样的查询?我曾经考虑过使用group-by或subselect,但是我不确定这是否对性能有好处…该表具有大量记录。
MySQL 不 支持解析功能(ROW_NUMBER,RANK,DENSE_RANK,NTILE …),但是您可以使用变量模拟功能。
如果要 N条 最新博客文章:
SELECT x.id, x.title, x.description, x.cat, x.filename, x.date FROM (SELECT bp.id, bp.title, bp.description, bp.cat, bp.filename, bp.date, CASE WHEN bp.cat = @category THEN @rownum := @rownum + 1 ELSE @rownum := 1 END AS rank, @category := bp.cat FROM BLOG_POSTS bp JOIN (SELECT @rownum := 0, @category := NULL) r ORDER BY bp.cat, bp.date DESC) x WHERE x.rank <= N
如果您希望等级1最早的博客文章,请将ORDER BY更改为:
ORDER BY bp.cat, bp.date