【问题标题】:If else not working in phpmyadmin trigger如果在 phpmyadmin 触发器中不工作
【发布时间】:2015-05-18 09:56:31
【问题描述】:

所以我在 phpmyadmin 中使用 MySQL 触发器。这是我对表 scorm_track 的触发器:

UPDATE userbatch 
LEFT JOIN scorm_track 
ON      
        (userbatch.user_id = scorm_track.userid)
LEFT JOIN trainingobject
ON      
        (scorm_track.tobjid = trainingobject.id)
IF scorm_track.element = 'cmi.core.lesson_status' THEN
    SET userbatch.to_completion = scorm_track.value,
        userbatch.trainingcompleted = scorm_track.timemodified;
ELSEIF scorm_track.element = 'cmi.core.score.raw' THEN
    SET userbatch.comment = scorm_track.value;
ENDIF;
WHERE (userbatch.batch_id = trainingobject.batchid) AND 
        scorm_track.id=NEW.id AND 
        scorm_track.element = 'cmi.core.lesson_status' OR scorm_track.element = 'cmi.core.score.raw'

但它显示以下错误:“MySQL 说 #1064 - You have an error in your SQL syntax...”

这个问题是在我添加了 IF ELSE 语句后开始出现的。它以前工作正常。谁能说明为什么会发生这种情况?

【问题讨论】:

    标签: php mysql if-statement triggers phpmyadmin


    【解决方案1】:

    这是因为加入时更新语法错误。 if-else 的用法在这里是错误的。查询应该是

    update userbatch ub
    left join scorm_track st on ub.user_id = st.userid
    left join trainingobject tob on tob.id = st.tobjid
    set
    ub.to_completion = 
     case 
       when st.element = 'cmi.core.lesson_status' then st.value 
     end ,
    ub.to_completion = 
     case when st.element = 'cmi.core.lesson_status' then st.value 
    end, 
    ub.trainingcompleted = 
     case when st.element = 'cmi.core.lesson_status' then st.timemodified 
    end, 
    ub.comment = 
    case when st.element = 'cmi.core.score.raw' then st.value 
    end
    where 
    ub.batch_id = tob.batchid
    and st.id = new.id 
    and ( st.element = 'cmi.core.lesson_status' or st.element = 'cmi.core.score.raw )
    

    【讨论】:

    • 请注意,当没有指定 ELSE 并且没有任何表达式的计算结果为 true 时,case 语句将导致 NULL。
    • 正如 Gervs 所指出的,当遇到 cmi.core.score.raw 时,trainingcompleted 和 to_completion 列被设置为 NULL。还有什么办法吗?
    猜你喜欢
    • 2015-08-24
    • 2014-02-02
    • 2015-10-14
    • 2017-09-06
    • 2018-03-04
    • 2013-05-16
    • 2015-10-16
    • 1970-01-01
    相关资源
    最近更新 更多