2017-05-31 11 views
-4

は、私はこのコードを解析するために助けを必要としてください。私はそれが意味することを解釈するのが少し混乱しています。これは私が書いたコードではなく、他のコードです。 私がやらなければならないことは、それとどこかにそれを を実装することを理解することです。SQLコード分析

$sql = "select t0.userid,concat(t3.firstname,',',t3.lastname) as name,count(*) as quizs,sum(if(t0.finalgrade > 0,1,0)) as quiz, sum(t0.finalgrade) as grade"; 
$sql .= " from mdl_grade_grades t0"; 
$sql .= " left join mdl_grade_items t1 on(t0.itemid= t1.id and t1.courseid = 37 and (t1.itemname like '%Daily Quiz%' or t1.itemname in ('Mid Term Exam','FINAL EXAM')))"; 
$sql .= " left join mdl_user t3 on(t3.id=t0.userid)"; 
$sql .= " where t0.userid >= 480"; 
$sql .= " group by t3.firstname,t3.lastname"; 
$res = mysql_query($sql); 
$response->totalcount = mysql_num_rows($res); 

$sql .= " Order by t3.firstname,t3.lastname"; 
$sql .= " Limit " .$start ."," .$limit ; 
$res = mysql_query($sql); 
while ($row = mysql_fetch_object($res)){ 
    $attend = $row->gquiz/$row->quizs; 
    $grade = $row->grade/$row->gquiz; 
    $response->items[] = array('id' => $row->userid,'name' => $row->name,'attend' => $attend,'grade' => $grade);  
} 
//  
echo json_encode($response); 
+0

これは、SQL Serverのコードではありません。それはmysqlです。 –

+4

これのどの部分が分かりませんか? –

+2

ようこそへスタックオーバーフロー。コードフォーマットを賢明に使用してください。太字であなた自身を引用すると、あなたは自分自身を第三者で話すそれらの王のように見えます。ありがとうございました! –

答えて

0

機能sum(if(t0.finalgrade > 0,1,0))が実際に0
機能sum(t0.finalgrade)は単純にすべてのレコードのfinalgradeを合計しfinalgrade大きいよりも、あるレコードの数をカウントしていただきありがとうございます。

0

IF()は組み込み関数であり、それはdocumentedです:expr1が(expr1を<> 0とexpr1の<> NULL)TRUEの場合

IF(expr1,expr2,expr3) 

、IF()はexpr2のを返します。 それ以外の場合は、expr3を返します。その後、

if(t0.finalgrade > 0,1,0) 

最終成績が0より大きい場合は1を返し、それ以外の戻り0

最後に、SUM()合計これらすべての0と1:お使いの場合には

PHPコードは、このMySQLのロジック内の任意の役割を果たしていません。