2014-01-14 73 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

相關問題