【发布时间】:2019-09-29 03:13:30
【问题描述】:
我想以一种面向未来的方式展示我的博客。所以我需要做一个查询,如果它们被创建,它们将引用新的博客类型。因此,x-column-name。在这种情况下,就是 blogType。此选择查询应包含所有博客类型的博客信息,但为每个博客类型获取 3 个博客。这有点令人困惑,所以这就是我重申的原因!
我已经在谷歌搜索如何限制结果方面做了一些工作。如下图:
$query = 'SELECT * FROM blogs
ORDER BY dateWritten
ASC LIMIT 3';
我将使用数组和 foreach 循环将结果输出到 blog_rss.php。我从这样的函数中获取数组:
function get_Recent_Blogs() {
global $db;
$query = 'SELECT * FROM blogs
ORDER BY dateWritten
ASC LIMIT 3';
try {
$statement = $db->prepare($query);
$statement->execute();
$result = $statement->fetchAll(PDO::FETCH_ASSOC);
$statement->closeCursor();
return $result;
} catch (PDOException $e) {
$error_message = $e->getMessage();
display_db_error($error_message);
}
}
这不是太重要,但至少它给你一些背景。
SELECT *
FROM (
SELECT b.*, ROW_NUMBER() OVER (PARTITION BY b.blogType ORDER BY b.blogID DESC) as rn
FROM blogs b
) x
WHERE x.rn <= 3
ORDER BY x.blogType, x.blogID DESC';
所以我已尽力实施该解决方案,但我遇到了一些错误。我不确定我是否应该为此开始新帖子,但上面的代码是我使用的,这是我得到的错误:
You have an error in your SQL syntax; it seems the error is around: '( PARTITION BY b.blogType ORDER BY b.dateWritten DESC ' at line 7
【问题讨论】:
-
你的 MySQL 版本是多少?
-
8.0.13 是我的版本
-
所以让我们澄清一下:您需要一个查询来返回每种博客类型的三篇最新文章。对吗?
-
完全正确。是的!
标签: php mysql limit-per-group