2016-09-14 6 views
0

編集:精錬マイ雄弁クエリ(Laravel)明確にするため

私は、クエリの

->wherein('course_id', $array) 

部分に明確なcourse_idsを戻すには、このクエリのためのいくつかの方法が必要です。完了したコースの合計数を取得しますが、ユーザーがコースを複数回完了した場合、合計に向かって数えられます。だから、何人の生徒がコースをやったのか知りたいのであれば、その生徒が1回以上コースを修了した場合はその番号は消えます。

public function report_count(){ 
    $array = \Session::get('course_report')['course']; 
    return $this->hasOne('Tracking', 'roster_id') 
     ->selectRaw('roster_id, count(*) as aggregate') 
     ->where('status', 1) 
     ->wherein('course_id', $array) 
     ->groupBy('roster_id'); 

最後にgroupBy( '​​course_id')を追加しようとしましたが、動作しません。

+0

この統計はcronジョブで生成できますか? –

+0

これはメモリの問題ですか?タイムアウトの問題?クエリをチャンクしたり、cronで事前処理したりできます。デバッグバーを使用してクエリの内容を確認していますか? – Blake

+0

最初にメモリに問題があります。私は記憶を上げ、今は時間がかかると信じています。私たちはすでに多くのcronジョブを持っていますが、シニア・デベロッパーにチェックして、それらを事前実行するためのアイデアがあるかどうか確認できます。私はデバッグバーを使用している、名簿のためのクエリは、それはn + 1これらの関係のそれぞれのクエリを吐き出す。私は熱心にクエリを読み込もうとしましたが、完了した各コースの値を0に変更するだけです。 –

答えて

0

固定。

@Robin Rの提案あたり
return $this->hasOne('Tracking', 'roster_id') 
     ->selectRaw('roster_id, count(distinct course_id) as aggregate') 
     ->where('status', 1) 
     ->wherein('course_id', $array) 
     ->groupBy('roster_id'); 

にクエリを変更し、私はこの雄弁な方法を試みるのではなく、私のselectRawクエリでSQLを利用する方法の検索に行ってきました。私はこのアイデアをブレインストーミングするのを手伝ったすべての人に感謝します。

+0

助けてくれるのはよかった!あなた自身の答えを解決してマークしてください。 – Robin