2016-10-22 18 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');