数据库左链接数据不存在,右表依旧显示数据

本文分享了一种解决收藏置顶功能的技术方案,通过优化数据库查询逻辑,实现了既能展示所有门店信息,又能突出用户收藏状态的目标,适用于需要展示完整列表同时标记用户偏好的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近项目遇到一个问题,需要些一个收藏置顶功能,试了N种查询方式,DB,ORM,都没查出来,使用DB左链接查询,如果按照用户id来查询用户的收藏情况,那么只会显示用户的收藏,那些没收藏的就不会显示,使用ORM的一对多关系,那么就不能按照收藏时间来进行倒序,同样实现不了,机缘巧合下搜到一大神著作,才解决,记录一下

//主表门店,附表收藏表,按照附表用户id来搜索,那么只能查出用户为2的收藏数据以及门店数据,那没有收藏的不显示,
$list = DB::table('shop')->select('*')
 ->leftJoin('collect','shop.id', '=', 'collect.collect_id')
  ->where(['shop.type'=>1,'shop.status'=>1])
  ->where('collect.user_id',2)
  ->orderBy('collect_time','desc');




//下面的实现了按照用户来搜索,显示全部的门店数据,有收藏就显示,没收藏自动补全为空,完美实现
$list = DB::table('shop')->select('*')
 ->leftJoin('collect',function($join)use ($data){
        $join->on('shop.id', '=', 'collect.collect_id')
        ->where('collect.user_id','=',0);
    })->where(['shop.type'=>1,'shop.status'=>1])->orderBy('collect_time','desc');


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值