2017-05-31 158 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

歡迎來到Stack Overflow。請明智地使用代碼格式;大膽地引用你自己,使你看起來像那些以第三人稱自己說話的國王。謝謝! –

回答

0

功能sum(if(t0.finalgrade > 0,1,0))實際上計數具有大於0 finalgrade
功能sum(t0.finalgrade)簡單概括的所有記錄finalgrade中的記錄數。

0

IF()是內置函數和它的documented

IF(expr1,expr2,expr3) 

如果expr1 TRUE(表達式1 <> 0且expr1的<> NULL),IF()返回表達式2。 否則,它返回expr3。

你的情況:

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

如果最終成績大於0則返回1,否則返回0。

最後,SUM()數額所有這些零和的。

PHP代碼在這個MySQL邏輯中不起任何作用。