php – Mysql查询组Concat在单个查询中限制子表的多个记录

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

相关文章

Hessian开源的远程通讯,采用二进制 RPC的协议,基于 HTTP 传输。可以实现PHP调用Java,Python,C#等多语...
初识Mongodb的一些总结,在Mac Os X下真实搭建mongodb环境,以及分享个Mongodb管理工具,学习期间一些总结...
边看边操作,这样才能记得牢,实践是检验真理的唯一标准.光看不练假把式,光练不看傻把式,边看边练真把式....
在php中,结果输出一共有两种方式:echo和print,下面将对两种方式做一个比较。 echo与print的区别: (...
在安装好wampServer后,一直没有使用phpMyAdmin,今天用了一下,phpMyAdmin显示错误:The mbstring exte...
变量是用于存储数据的容器,与代数相似,可以给变量赋予某个确定的值(例如:$x=3)或者是赋予其它的变...