如何解决查找用户拥有多少匹马? PostgreSQL查询
我有四个表:用户,订单,份额和马匹。
一个用户有很多订单,一个订单有很多份额,一匹马有很多份额。
我想查找特定用户拥有的每匹马的份额(包括当用户拥有特定马匹的零份额时)。
我尝试了以下方法,但是当用户对特定马匹拥有零份额时,我无法检索到这种情况。
$userHorses = DB::table('orders')->join('shares','orders.id','=','shares.order_id')
->join('horses','horses.id','shares.horse_id')
->where('orders.user_id',$user_id)
->select('horses.name','horses.slug',DB::raw('count(*) as totalShares'))
->groupBy('horses.name','horses.slug')
->get();
return $userHorses;
解决方法
要检索所有具有用户共享数的马,您将需要使用条件聚集之类的左联接,
$userHorses = DB::table('horses h')
->leftJoin('shares s','h.id','=','s.horse_id')
->leftJoin('orders o','o.id','s.order_id')
->select('h.name','h.slug',DB::raw('sum(case when o.user_id = :user_id then 1 else 0 end) as totalShares',['user_id' => $user_id])
)
->groupBy('h.name','h.slug')
->get();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。