查找用户拥有多少匹马? (PostgreSQL查询)

时间:2020-08-18 13:54:13

标签: database laravel postgresql eloquent psql

我有四个表:用户,订单,份额和马匹。

一个用户有很多订单,一个订单有很多份额,一匹马有很多份额。

我想查找特定用户拥有的每匹马的份额(包括当用户拥有特定马匹的零份额时)。

我尝试了以下方法,但是当用户对特定马匹拥有零份额时,我无法检索到这种情况。

$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.id','horses.slug',DB::raw('count(*) as totalShares'))
          ->groupBy('horses.name','horses.id','horses.slug')
          ->get();

return $userHorses;

1 个答案:

答案 0 :(得分:0)

要检索所有具有用户共享数的马,您将需要使用条件聚集之类的左联接,

$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.id',
            '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.id','h.slug')
          ->get();