2016-03-19 52 views
0

我对Laravel很新。如何计算Laravel 5.1的得分

我已经命名为申请人,提问,回答三个表:

申请人

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 

问题

id jobid answer 
21 151 1 
22 151 1 

这里我想根据问题答案表计算申请人分数的百分比,假设一个工作有两个问题,如果申请人回答与问题表答案匹配,那么他将得到100%的分数,如果任何一个没有匹配,那么会从得分中扣除很多。

我想要的分数应该划分像 例如:一个职业都有5个问题

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

的作业ID 151申请表应如下

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

,我使用以下查询但它没有给出预期的结果。

$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喜欢叫它:

$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 
    ")) 

,你可以看到它返回下面的结果50%和100%,按您的例子: enter image description here

注:

  1. 我有cre在我的本地测试环境中添加了MySQL语句并对其进行测试,并且它可以正常工作。 但是因为我没有Laravel应用程序的代码,所以我没有在Laravel中测试它,所以请测试它并让我知道。
  2. 这只是一个例子来说明你可以从MySQL获得什么,你可以改变和微调语句来获得最终结果。