You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Moodle 4.2.1创建测验题时出现Subquery返回多行错误求助

Moodle 4.2.1 创建测验时数据库读取错误解决指南

问题详情

使用Moodle 4.2.1版本创建测验题目时触发数据库读取错误,核心报错为Subquery returns more than 1 row,完整错误追踪信息如下:

Error reading from database

More information about this error

Debug info: Subquery returns more than 1 row

SELECT allversions.id AS versionid, allversions.version,
    allversions.questionid
FROM mdlyo question_versions allversions
WHERE allversions.questionbankentryid =
    ( SELECT givenversion.questionbankentryid
      FROM mdlyo question_versions givenversion
      WHERE givenversion questionid = ?
)
AND allversions.status <> ?
ORDER BY allversions version DESC

[array (
0 => 1298,
1 => 'draft',
)]
Error code: dmlreadexception
Stack trace:
⚫ line 494 of /lib/dml/moodle_database.php: dml_read_exception thrown
⚫ line 293 of /lib/dml/moodle_read_slave_trait.php: call to moodle_database->query_end()
⚫ line 1278 of /lib/dml/mysqli_native_moodle_database.php: call to mysqli_native_moodle_database->query_end()
⚫ line 64 of /mod/quiz/classes/question/bank/qbank_helper.php: call to mysqli_native_moodle_database->get_records_sql()
⚫ line 699 of /mod/quiz/classes/structure.php: call to mod_quiz\question\bank\qbank_helper::get_version_options()
⚫ line 770 of /mod/quiz/classes/output/edit_renderer.php: call to mod_quiz\structure->get_version_choices_for_slot()
⚫ line 547 of /mod/quiz/classes/output/edit_renderer.php: call to mod_quiz\output\edit_renderer->question()
⚫ line 520 of /mod/quiz/classes/output/edit_renderer.php: call to mod_quiz\output\edit_renderer->question_row()
⚫ line 95 of /mod/quiz/classes/output/edit_renderer.php: call to mod_quiz\output\edit_renderer->questions_in_section()
⚫ line 210 of /mod/quiz/edit.php: call to mod_quiz\output\edit_renderer->edit_page()

错误截图:
错误追踪截图

触发原因

从报错SQL逻辑来看,主查询用=匹配子查询返回的questionbankentryid,但子查询针对questionid=1298返回了多条不同的题库条目ID,导致SQL语法冲突。常见诱因包括:

  • 题目版本数据异常,同一题目被重复关联到不同题库条目
  • 数据库迁移、同步过程中产生数据冗余
  • 第三方题库插件操作破坏了数据一致性

解决方案

临时修复步骤

  1. 登录Moodle数据库管理工具(如phpMyAdmin)
  2. 执行SQL定位异常数据:
SELECT questionid, questionbankentryid, status, id
FROM mdlyo_question_versions
WHERE questionid = 1298
ORDER BY id DESC;
  1. 保留最新的有效记录(通常为非draft状态),删除冗余关联记录(操作前务必备份数据库):
-- 示例:保留ID最大的记录,删除其余
DELETE FROM mdlyo_question_versions
WHERE questionid = 1298
AND id NOT IN (
    SELECT MAX(id) FROM mdlyo_question_versions WHERE questionid = 1298
);

长期优化建议

  • 升级到Moodle 4.2.x系列最新补丁版本,官方可能已修复此类数据一致性问题
  • 避免直接修改数据库表,所有题目操作通过Moodle后台完成
  • 定期运行Moodle内置数据库检查工具(路径:站点管理 -> 服务器 -> 数据库 -> 检查数据库),及时排查数据异常

内容的提问来源于stack exchange,提问作者Zain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 08:37:03