【问题标题】:SQl code analysisSQL代码分析
【发布时间】:2017-05-31 14:46:50
【问题描述】:

我需要帮助来分析这段代码。我有点困惑解释它的含义。这不是我写的代码,而是其他代码。 我需要做的就是理解它并能够实现它 别的地方 。谢谢

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

【问题讨论】:

  • 这不是 sql server 代码。是mysql。
  • 您不了解其中的哪些部分?
  • 欢迎来到 Stack Overflow。请明智地使用代码格式;用粗体引用自己会让你看起来像那些以第三人称谈论自己的国王。谢谢!
  • 是的,我知道它的 mysql 。发布问题时我的错误。但是,我不明白的部分是算术运算
  • 你的意思是sum()函数吗?它,嗯,总结行。 1 + 4 + 6 使 11

标签: mysql sql


【解决方案1】:

函数sum(if(t0.finalgrade > 0,1,0))实际上是计算finalgrade大于0的记录数。
函数sum(t0.finalgrade) 只是将所有记录的finalgrade 相加。

【讨论】:

    【解决方案2】:

    IF() 是一个内置函数,它是documented

    IF(expr1,expr2,expr3)
    

    如果 expr1 为 TRUE(expr1 0 且 expr1 NULL),IF() 返回 expr2。 否则,它返回 expr3。

    在你的情况下:

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

    如果最终成绩大于 0,则返回 1,否则返回 0。

    最后,SUM() 将所有这些零和一相加。

    PHP 代码在这个 MySQL 逻辑中没有任何作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-27
      • 2011-08-14
      • 2011-05-04
      • 2015-02-15
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多