我需要将两个查询合并为一个,以便可以在刀片视图中的表中的foreach上一次调用它。我尝试使用merge()
,但它显示两个单独的查询。 CountofPatents
是用户提交的所有专利,CountofApprovedPatents
是status
为“ 2”的专利。这是现在的样子:
array 0 [person_id:1
批准专利数:4
状态:2]array 1 [person_id:2
批准专利数:2
状态:2]array 2 [person_id:1
专利数:5]array 3 [person_id:2
专利数:4]
这就是它的样子
array 0 [person_id:1
批准专利数:4
专利数:5]array 1 [person_id:2
批准专利数:2
专利数:4]
到目前为止,这是我的代码
AdminController
$start = $request->input('start');
$end = $request->input('end');
$approvedPatents = DB::table('patents')
->select('person_id', DB::raw('count(*) as CountofApprovedPatents'))
->where([
['status', '=', 2],
['date_approved', '>=', $start],
['date_approved', '<=', $end],
])
->groupBy('person_id')
->orderBy('status', 'desc')
->get();
$totalPatents = DB::table('patents')
->select('person_id', DB::raw('count(*) as CountofPatents'))
->where([
['date_approved', '>=', $start],
['date_approved', '<=', $end],
])
->groupBy('person_id')
->orderBy('status', 'desc')
->get();
$patents = $approvedPatents->merge($totalPatents);
$results = $patents->all();
return view('admin.patents.showPatents', compact('results',
'start', 'end'));
是否可以合并这两个查询?
$results = DB::table('patents')
->union($approvedPatents)
->union($totalPatents)
->get();
答案 0 :(得分:0)
我认为您正在寻找的是Unions。
它允许您指定一个查询,然后将其与最终查询结合起来。
例如。
$first = DB::table('users')
->whereNull('first_name');
$users = DB::table('users')
->whereNull('last_name')
->union($first)
->get();
尝试:
$approvedPatents = DB::table('patents')
->select('person_id', DB::raw('count(*) as CountofApprovedPatents, status'))
->where([
['status', '=', 2],
['date_approved', '>=', $start],
['date_approved', '<=', $end],
])
->groupBy('person_id')
->orderBy('status', 'desc')
$totalPatents = DB::table('patents')
->select('person_id', DB::raw('count(*) as CountofPatents'))
->where([
['date_approved', '>=', $start],
['date_approved', '<=', $end],
])
->groupBy('person_id')
->orderBy('status', 'desc')
->union($approvedPatents)
->get();
否则,您可能正在寻找Joins-值得看一下文档:)
答案 1 :(得分:0)
您可以在原始选择的列中使用MySQL的IF condition。
$results = DB::table('patents')
->select('person_id',
DB::raw('sum(IF(status = 2,1,0)) as CountofApprovedPatents'),
DB::raw('count(*) as CountofPatents')
->where([
['date_approved', '>=', $start],
['date_approved', '<=', $end],
])
->groupBy('person_id')
->orderBy('status', 'desc')
->get();
如果当前行的IF
是sum()
,则1
中的上述status
条件会将2
添加到结果中,否则将添加0
有效地不会打破总和。