mysql 获取最新创建的职位,但在每个页面不应超过1后,每个用户

mspsb9vt  于 11个月前  发布在  Mysql
关注(0)|答案(1)|浏览(86)

我使用Laravel,我有一个Post模型。

class Post {
   id, 
   title,
   user_id
   ...
}

字符串
我的目标是通过分页来获取最新创建的帖子。但我不想在一个页面上获得同一个用户的两个帖子。

Post::onePostPerUser()->orderByDesc('id')->simplePaginate(5)


例如,当页面为1时,我想获得帖子(100,98,96,95,94)。在下一页(99,97,.....)
| ID|用户标识|
| --|--|
| 100 | 1 |
| 99 | 1 |
| 98 | 2 |
| 97 | 2 |
| 96 | 3 |
| 95 | 4 |
| 94 | 5 |
| 93 | 6 |
我试过使用分区写作用域,但它只对1页正确。

public function scopeOnePostPerUser($query)
{
    return $query->selectRaw('*')
        ->fromSub(function ($query) {
            $query->selectRaw('*, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY id DESC) AS rn')
                ->from('posts');
        }, 'posts')
        ->where('rn', '=', 1);
}

knsnq2tg

knsnq2tg1#

你不需要任何作用域,只需要user group by和latest方法。

$posts = Post::latest('id')->groupBy('user_id')->simplePaginate(5);

字符串

相关问题