【发布时间】:2019-08-07 10:30:36
【问题描述】:
我正在尝试创建一个 Laravel 语句,它应该为每个用户返回正确的值,以获取答案数量和问题数量,如下所示:
$users = User::join('user_answers', 'users.id', '=', 'users_answers.user_id')
->join('user_questions', 'users.id', '=', 'user_questions.user_id')
->select(
'users.id',
'users.username',
DB::raw('COUNT(user_answers.user_id) AS answers'),
DB::raw('COUNT(user_questions.user_id) AS questions')
)
->groupBy('users.id');
注意:groupBy 是必需的,因为它在 DataTables 中使用,否则它将只显示一行。
当我尝试:
dd($users->first());
我得到的是这样的:
如您所见,出于某种原因,问题和答案的值相同,并且不正确。我想连接有某种重叠。
例如,如果我删除其中一个联接,只保留其中一列,则数字会正确显示,如下所示:
老实说,我在这里很迷茫,希望能得到一些帮助。
谢谢!
【问题讨论】:
-
计数相乘 (1412 * 5 = 7060),因为您加入了不相关的问题和答案。
-
我认为你不应该在 select 中使用
DB::raw()你可以附加 where 子句。 -
我会使用集合来代替加入、db::raw() 和选择
-
@senty 将 1412 个答案提取到集合中只是为了获得计数?这将加速全球变暖;-)
-
快速和“肮脏”的修复将是
COUNT(DISTINCT user_answers.id) AS answers
标签: php mysql laravel join eloquent