如何解决SQL查询从数据库表中获取所有帖子,但从特定用户获取最多5条条目?
我正在构建一个PHP-blog系统,并希望在首页上显示所有帖子,但每个用户最多显示五个帖子。 我考虑使用数据库中的查询来执行此操作,但是我对如何执行此操作一无所知。 我猜想count()函数会派上用场,但是有人可以帮助我
这是我今天的功能,我只是想对其进行改进,以使每个用户最多获得五个帖子
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;`
解决方法
如果您正在运行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
列所指定。如果需要其他排序规则,可以将ORDER BY
的{{1}}子句更改为其他某些列或一组列。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。