如果在 phpmyadmin 触发器中不工作
Posted
技术标签:
【中文标题】如果在 phpmyadmin 触发器中不工作【英文标题】:If else not working in phpmyadmin trigger 【发布时间】: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 语句后开始出现的。它以前工作正常。谁能说明为什么会发生这种情况?
【问题讨论】:
【参考方案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。还有什么办法吗?以上是关于如果在 phpmyadmin 触发器中不工作的主要内容,如果未能解决你的问题,请参考以下文章
从 PHPMyAdmin 中删除数据时,DELETE 链接在 PHP 中不执行任何操作
MySql 查询在 PHPmyadmin 中工作,但在 codeigniter 中不工作
MultyQuery 在 phpmyadmin 中工作,在 Mysqli 中不工作,在其他服务器上工作