php – Mysql查询组Concat在单个查询中限制子表的多个记录
发布时间:2020-12-13 16:27:08 所属栏目:PHP教程 来源:网络整理
导读:相册表: +------------------------------+| id name updated_at|+------------------------------+ Album_member表: +------------------------------------+| id album_id member_id |+------------------------------------+ Album_media表: +--------
相册表:
+------------------------------+ | id name updated_at| +------------------------------+ Album_member表: +------------------------------------+ | id album_id member_id | +------------------------------------+ Album_media表: +--------------------------------+ | id album_id link | +--------------------------------+ 我的查询: $limit = 30; $member_id = 1; SELECT a . *,(SELECT GROUP_CONCAT(CONCAT('$assets/album_image/medium/',ds_album_media.link) SEPARATOR ',') as link FROM ds_album_media WHERE ds_album_media.album_id = a.id ORDER BY a.updated_at desc LIMIT 0,5) AS photo_link FROM `ds_album` a LEFT JOIN ds_album_media amd ON amd.album_id = a.id LEFT JOIN ds_album_member amb ON amb.album_id = a.id where amb.member_id = " . $member_id . " GROUP BY a.id ORDER BY a.updated_at desc LIMIT 0,$limit 现在,对于每张专辑,有多个album_media和album_member是专辑用户正在关注的,我想要的数据以这种方式检索所有使用以下的相册,并且该相册的所有照片,但约束是需要设置album_media限制5和专辑限制30. >限制不工作,因为我使用group_concat任何其他方式来限制group_concat的记录? 我使用substring_index()函数,但是在性能方面是否足够了? 我试过这个查询与laravel, Laravel查询(编辑): $data = Album::select("album.*") ->leftjoin("album_media",'album_media.album_id','=','album.id') ->leftjoin("album_member",'album_member.album_id','album.id') ->where('album_member.member_id',$member_id) ->with(['albumMedia' => function($query) { return $query->where('album_id','album.id')->take(5); }]) ->groupBy('album.id')->orderBy('album.updated_at','desc')->take($limit)->skip($skip)->get()->toArray();
建立你的关系,然后限制他们:
$albums = Album::with('albumMedia','albumMembers') ->whereHas('albumMembers',function($query) use ($userId) { $query->where('albumMembers.member_id',$userId); }) ->orderBy('album.updated_at') ->take($limit) ->skip($skip) ->get(); 最后,您可以添加一个方法到Album模型,这将帮助您检索连接的字符串/链接,基于热切的关系. 更好的是,而不是做一个地方,你可以像Album模型上的范围方法一样,这将为您创建它.这将比上面的例子更干净. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |