小编最近开发一个功能,短视频列表,短视频展示出来需要根据user_id去重,同一个用户不能出现两条他的视频,于是用到group:

小编的代码开始是这样写的:

$video = VideoModel::where($where)->limit($number)->group('user_id')->relation('user')->select();

然后经过测试,确实每个用户只列出一条视频,但是当用户发布新视频的时候,展示的还是用户的第一个视频,于是需要修改代码,如下:

//修复后分组可获取最新ID,调用 buildSql 方法后不会进行实际的查询操作,而只是生成该次查询的 SQL 语句
		$subQuery = Db::name('video')
            ->field('id,title,image,likes,user_id')
            ->order('id desc')
            ->where($where)
            ->limit($number)
            ->buildSql();
        //然后使用子查询构造新的查询
        $video = Db::table($subQuery.' a')
            ->field('title,image,likes,user_id')
            ->group('user_id')
            ->select();
        
        //获取关联数据
        foreach($video as $key => $val){
            $video[$key]['user'] = UserModel::where('id',$val['user_id'])->find();
        }

OK,问题修复!参考资料:https://cloud.tencent.com/developer/article/1928966

点赞(0) 打赏

Comment list 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部