2017-05-31 81 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逻辑中不起任何作用。