小编最近开发一个功能,短视频列表,短视频展示出来需要根据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
发表评论 取消回复