2014-01-14 76 views
0

这是我的SQL查询的一部分。SQL case - 如果某个值等于某个值,则执行一些操作

SELECT 

c.fullname AS Course, 
gi.itemname AS Activity, 
CONCAT(ROUND(gg.finalgrade,1) , '%') AS Grade, 
cmc.completionstate, 
gi.itemmodule, 

concat('<a target="_new" href="localhost/moodle/mod/quiz/view.php?id=',cm.id,'">View this Activity</a>') AS 'Link' 

我想显示上述链接时gi.itemmodule =测验,和不同的链路(..的moodle/MOD/SCORM ..)时gi.itemmodule = SCORM等...

我在想这需要一个CASE陈述,但不知道如何去做。

回答

3
case gi.itemmodule 
    when 'quiz' 
     then concat(<onelink>) 
    when 'scorm' 
     then concat(<oneotherlink>) 
    else concat(<defaultlink>) 
end as 'Link' 

如果concat中只有一部分concat应该改变,你也可以这样做。

concat('<a target="_new" href="', 
     (case gi.itemmodule 
     when 'quiz' 
      then 'value of href' 
     when 'scorm' 
      then 'another value of href' 
     else 'defaultvalue of href' 
     end), 
     cm.id, 
     '">View this Activity</a>') as 'Link' 

这将避免代码重复,但可能难以阅读...

按照给定的样本,看来你可能只是这样做(但不知道)

concat('<a target="_new" href="localhost/moodle/mod/',gi.itemmodule, '/view.php?id=',cm.id,'">View this Activity</a>') AS 'Link' 

,或者一些itemmodule是有用的链接,但不是所有的

concat('<a target="_new" href="localhost/moodle/mod/', 
     (case when gi.itemmodule in ('scorm', 'quiz', 'asdf') 
      then gi.itemmodule 
      else 'defaultValue' 
     end), 
     '/view.php?id=', 
     cm.id, 
     '">View this Activity</a>') AS 'Link' 
+0

谢谢拉斐尔这看起来不错,但我不仅有2个选项,'测验','scorm','赋值'等有不同的值,总共有大约5个值。那么不需要稍微不同呢?谢谢 – user1525612

+0

@ user1525612我改变了两个以上的例子。顺便说一句,添加最后的解决方案,可以使事情变得更容易(但它取决于您的数据/需求) –

+0

太棒了,非常感谢! – user1525612

0

您不应该在SQL查询中真正建立链接。使用moodle_url()函数,而不是

$sql = "SELECT 
      c.fullname AS Course, 
      gi.itemname AS Activity, 
      " . $DB->sql_concat('ROUND(gg.finalgrade,1)' , '%') . " AS Grade, 
      cmc.completionstate, 
      gi.itemmodule, 
      ... 
     "; 

$ DB-> sql_concat()是在Moodle中使用CONCAT一个跨数据库功能。

$activities = $DB->get_records_sql($sql); 
foreach ($activities as $activity) { 
    if ($activity->itemmodule == 'quiz') { 
     // Custom url 
     $url = new moodle_url('/mod/quiz/view.php', array('id' => $activity->cmid)); 
    } else { 
     // Module url 
     $url = new moodle_url('/mod/' . $activity->itemmodule . '/view.php', array('id' => $activity->cmid)); 
    } 
    $link = html_writer::link($url, get_string('view', 'mod_' . $activity->itemmodule)); 
    echo $link; 
} 
+0

嗨罗素,谢谢你!不过,我将自定义sql报告插件与可配置报告一起使用。 – user1525612

相关问题