如何通过groupBy只获取到每个分类下的三条数据呢?
videos表中有category_id 区分综艺 动漫等;
//我尝试使用会获取到category_id下的全部数据,如何只获取updated_at 最后三条数据呢
$videos = Video::with(['category:id,name'])->get()->groupBy('category_id')->toArray();
查出来之后再处理一下就行了
可以换个思路,查分类表使用
Category::with(['videos'])
,只需要关联模型中使用orderBy
,和limit
就可以实现了。你参考这个语句实现,shop_name 相当于你的分类ID,price 相当于你的 updated_at 。
每种分类显示多少条数据,把 N 换成需要显示对应的数字即可,大于还是小于是控制你要取最大N条还是最小N条。
MySQL 8.0 以上的,可以用窗口函数来实现,其他版本也有其的实现方式,搜索
MySQL TopN
如果分类不多,是有限个,可以使用union all联合查询
按照楼上所说的换个思路,用分类去关联查视频
试试
这种排行榜的数据最好是从数据库里面读出来然后cache,如果是cache你多查几次也无所谓了
先遍历分类 然后 limit取 video数据不行吗?