SQL查询从数据库中的一个表中获取所有帖子,但来自特定用户的最多5个条目? [复制]

Posted

技术标签:

【中文标题】SQL查询从数据库中的一个表中获取所有帖子,但来自特定用户的最多5个条目? [复制]【英文标题】:SQL query to get all posts from a table in the db but max 5 entrys from a specific user? [duplicate] 【发布时间】:2020-12-17 20:13:47 【问题描述】:

我正在构建一个 php-blog 系统,并希望在起始页面上显示每个用户的所有帖子,但最多显示五个。 我想通过数据库中的查询来做到这一点,但我不知道如何做到这一点。 我想 count() 函数会派上用场,但有人可以帮帮我

这是我今天的功能,我只是想改进它以从每个用户那里获得最多 5 个帖子

protected function getAllPostsDB() 
    $sql = "SELECT recipes.Recipe_ID, recipes.Title, recipes.Short_description, recipes.Step_by_step, 
    recipes.create_date, recipes.last_mod_date, recipes.Portions, recipes.imgPath, users.Username
    FROM recipes 
    JOIN users
        ON recipes.User_ID = users.User_ID
    ORDER BY recipes.create_date DESC";
    $stmt = $this->connect()->query($sql);
    /* fetch all is already set to associative array*/
    $result = $stmt->fetchAll();
    return $result;`

【问题讨论】:

【参考方案1】:

如果您运行的是 mysql 8.0,只需使用窗口函数:

SELECT r.Recipe_ID, r.Title, r.Short_description, r.Step_by_step, 
    r.create_date, r.last_mod_date, r.Portions, r.imgPath, u.Username
FROM (
    SELECT r.*, ROW_NUMBER() OVER(PARTITION BY User_ID ORDER BY create_date DESC) rn
    FROM recipes r
) r
INNER JOIN users ON r.User_ID = u.User_ID
WHERE r.rn <= 5
ORDER BY r.create_date DESC

这给出了每个用户的最后五个食谱,由列 create_date 指定。如果您需要其他排序规则,可以将ROW_NUMBER()ORDER BY 子句更改为其他列或列集。

【讨论】:

非常感谢,它现在工作得很好!,你救了我一夜

以上是关于SQL查询从数据库中的一个表中获取所有帖子,但来自特定用户的最多5个条目? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何从 SQL Server 文件表中的二进制数据中获取文件类型?

如何下载帖子表中的所有标签?

如何从 SQL Server 中特定数据库的表中获取所有列名?

SQL:如何从单独的表动态计算值?

从zend 2中的mysql查询中获取所有数据

SQL Server:从同一个表和不同表中获取日期时使用其他东西而不是联合