【问题标题】:Laravel How do the count for each userLaravel 如何对每个用户进行计数
【发布时间】:2017-04-19 14:03:07
【问题描述】:

我想在我的结果 3 个字段中检索每个用户的 wallsfollowexos 的计数。

下面的代码为每个字段提供了相同的计数:

$profils = \DB::table('users')
->select(['users.*',\DB::raw('count(follow.user_id) as likeme'), \DB::raw('count(murs.user_id) as murme'), \DB::raw('count(exos.user_id) as exome')])
        ->leftjoin('murs', 'users.id', '=', 'murs.user_id')
        ->leftjoin('exos', 'users.id', '=', 'exos.user_id')             
        ->leftjoin('follow', 'users.id', '=', 'follow.user_id')
        ->groupby('users.id')
        ->paginate(15);

【问题讨论】:

  • 上述查询有什么问题?
  • 结果不正确,例如我必须收到:user1 count(follow.user_id) = 5 USER1 count(exos.user_id) = 8 USER1 count(walls.user_id) = 17 但是有了这个请求,我得到每个 count() 的 10 个结果,相反,如果我在我的请求中是单个 count(),我会得到好的结果。
  • @nabil:你有表前缀吗?您是否还可以分享您的 SQL 查询,它可以为您提供所需的结果。
  • @RaunakGupta 表前缀,不!我的 SQL 查询:SELECT Count(follow.user_id) AS likeme, Count(murs.user_id) AS murme, Count(exos.user_id) AS exome, users.id, users.name from users left join murs on(users.id = murs.profil_id) left join exos on(users.id = follow.profil_id) left join follow on(users.id = follow.profils_id) GROUP BY users.id 也使用这个 sql 查询我不想要结果!?
  • 将 toSql() 添加到您的代码中,例如:“$profils = \DB::table('users')->select()............->paginate( 15)->toSql() "它会给你原始查询然后分析什么问题

标签: php mysql sql laravel query-builder


【解决方案1】:

试试下面的代码:

$profils = \DB::table('users')
->select(['users.*',\DB::raw('count(DISTINCT(follow.user_id)) as likeme'), \DB::raw('count(DISTINCT(murs.user_id)) as murme'), \DB::raw('count(DISTINCT(exos.user_id)) as exome')])
        ->leftjoin('murs', 'users.id', '=', 'murs.user_id')
        ->leftjoin('exos', 'users.id', '=', 'exos.user_id')             
        ->leftjoin('follow', 'users.id', '=', 'follow.user_id')
        ->groupby('users.id')
        ->paginate(15);

如果这对你不起作用,请告诉我。

【讨论】:

  • 我收到三个字段的数字 1!?
猜你喜欢
  • 2019-05-10
  • 1970-01-01
  • 2013-07-04
  • 2017-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-08
  • 2015-10-06
相关资源
最近更新 更多