加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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的记录?
>我正在使用laravel,所以任何解决方案也是最受欢迎的.

我使用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模型上的范围方法一样,这将为您创建它.这将比上面的例子更干净.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读