2016-03-19 86 views
0

私はLaravelにとって非常に新しいです。Laravel 5.1の得点の計算方法

私は3つの申請者として名前のテーブル、質問、回答があります。

応募

id jobid name 
1 151 ABC 
2 151 DEF 

id qid jobid aaplicantid answer 
1 21 151  1   1 
2 22 151  1   0 
3 21 151  2   1 
4 22 151  2   1 

質問

回答します210
id jobid answer 
21 151 1 
22 151 1 

ここで私は質問に基づいて応募者の%の割合を計算したいと答えています。回答者テーブルは1つの仕事を想定しています。応募者が質問表の回答と一致すれば100%一致していない場合は、スコアから差し引かれます。

私はスコアが例えば のように分割する必要があるとしますつのジョブが

id name score joid 
1 ABC 50% 151 
2 DEF 100% 151 

そして、私は次のように使用していますが、次のように申請リストがあるべきジョブID 151のための5つの質問

score=>100/count(questions)=20 for each matched answer 

を持っています予想される結果が得られません。

$apps=applicants::where('jobid','=',$jobId)->get(); 

    foreach($apps as $apo){ 
     $appid[]=$apo->id; 
    } 


    $score=answers::whereIn('appid',$appid)->where('jobid','=',$jobId)->get(); 

    $qid=array(); 
    foreach($score as $s){ 
     $qid[]=$s->qid; 
    } 
    $queid=questions::whereIn('id',$qid)->where('jobid','=',$jobId)->get(); 

    $calscore=100/(count($queid)); 


    $key = 0 ; $finalscore = array();$sss = 0; 
    for($n = 0; $n< count($queid); $n++) { 
     foreach($queid as $que){ 
      $quei[]=$que->id; 
      $weight[]=$que->weight; 
      foreach ($score as $s){ 
       $qid[]=$s->qid; 
       $sc[]=$s->answer; 
       if($que->id==$s->qid){ 

        if($weight==$sc){ 
        $finalscore=$sss+$calscore; 
        $sss++; 

        } 


       } 
      } 

      $key++; 

     } 
    } 

    dd($finalscore); 

でも、私は結合クエリで適切な結果を得られませんでした。雄弁なモデルで可能ですか?

誰かがこれを解決するために私を助けてくださいできますか?

答えて

0

私はあなたが計算された割合を得るためにMySQLのステートメントを使用することをお勧めします。

Laravel MySQLデータベースでビューを作成することができます。

SELECT *, (SUM(answer)/COUNT(*) * 100) AS results 
    FROM answers 
    LEFT JOIN applicants 
     ON answers.applicantid = applicants.id 
    GROUP BY answers.applicantid 

次のようにLaravelからそれを呼び出すことも可能である: enter image description here

:あなたはそれはあなたの例に従って、50%、100%の結果、以下の返し見ることができるよう

$results = DB::select(DB::raw(" 
    SELECT *, (SUM(answer)/COUNT(*) * 100) AS results 
     FROM answers 
     LEFT JOIN applicants 
      ON answers.applicantid = applicants.id 
     GROUP BY answers.applicantid 
    ")) 

注:

  1. 私はcre私のローカルテスト環境でMySQLの声明を出してテストし、それが動作します。 しかし、私はLaravelアプリケーションのコードを持っていないので、Laravelでテストしていないので、テストして教えてください。
  2. これは、MySQLから入​​手できるものを示すための例です。最終結果を得るために、ステートメントを変更して微調整することができます。