2016-10-22 22 views
1

这是我当前从查询表corporations,jobs,corp_networkscandidates获取数据的查询。如何编写Laravel查询以对重复记录进行分组

$sqlCandSkills = DB::table('corporations') 
    ->join('jobs', 'corporations.corp_id', '=', 'jobs.corp_id') 
    ->join('corp_logos', 'corp_logos.corp_id', '=', 'corporations.corp_id') 
    ->join('candidates', 'corporations.corp_id', '=', 'candidates.corp_id') 
    ->join('corp_networks', 'corporations.corp_id', '=', 'corp_networks.participation_corp_id') 
    ->where([ 
     'corp_networks.owning_corp_id' => $this->corp->corp_id, 
     'corp_networks.status' => "Accepted" 
    ]) 
    ->orwhere([ 
     'corporations.corp_id' => $this->corp->corp_id 
    ]) 
    ->where('candidates.is_available', '=', 0)->get(); 

我需要添加一个验证查询到这个,因为我从上面的查询获取多行相同的数据。

for($i=0 ; $i<sizeof($skillsArray); $i++){ 
    $value= $skillsArray[$i]; 

    echo($value); 

    $jobDetails = DB::select(
     'SELECT * FROM jobs WHERE job_technical_requirements LIKE "%'.$value.'%" AND job_status = 1 INNER JOIN ' 
    ); 
} 

以上查询提供了所有数据,但我也需要执行上述检查。 我正在做这第二个查询来比较数组的值与列中的csv值。 现在我需要将所有这一切变成一个结果。 我需要在sql查询或laravel查询中做到这一点的方法。

回答

0

可以使用GROUPBY

$sqlCandSkills = DB::table('corporations') 
    ->distinct() 
    ->join('candidates', 'corporations.corp_id', '=', 'candidates.corp_id') 
    ->join('corp_networks', 'corporations.corp_id', '=', 'corp_networks.participation_corp_id') 
    ->where([ 
     'corp_networks.owning_corp_id' => $this->corp->corp_id, 
     'corp_networks.status' => "Accepted" 
    ]) 
    ->orwhere([ 
     'corporations.corp_id' => $this->corp->corp_id 
    ]) 
    ->where('candidates.is_available', '=', 0) 
    ->groupBy(array(
     'corporations.corp_id', 
     'corp_networks.participation_corp_id', 
     'corp_networks.owning_corp_id' 
     )) 
    ->get('corporations.corp_id');