guoyu/题库导入问题说明.md

178 lines
4.8 KiB
Markdown
Raw Normal View History

2025-12-06 20:11:36 +08:00
# 题库导入问题解决方案
## 🔍 问题描述
在**考试管理**中创建考试时,选择"从题库抽取",但下拉框中**看不到新建的题库和题目**。
## 🎯 问题原因
考试管理页面调用的是 `/study/questionBank/my-banks` 接口,这个接口**只返回当前登录用户创建的题库**,查询条件是:
```sql
WHERE b.create_user_id = #{当前用户ID}
```
如果题库的 `create_user_id` 字段为**空**或与当前用户ID**不匹配**,就会导致题库不显示。
## 📊 可能的情况
### 情况1数据库缺少字段
数据库表 `study_question_bank` 缺少 `create_user_id` 字段。
### 情况2字段值为空
题库存在,但 `create_user_id` 字段为 `NULL`
### 情况3用户ID不匹配
题库的 `create_user_id` 与当前登录用户的ID不一致。
## 🔧 快速修复步骤
### 第1步打开数据库客户端
使用 Navicat、DataGrip 或命令行连接到数据库。
### 第2步检查表结构
```sql
SHOW COLUMNS FROM study_question_bank LIKE 'create_user_id';
```
**如果没有结果**,说明缺少字段,执行:
```sql
ALTER TABLE study_question_bank
ADD COLUMN create_user_id BIGINT(20) NULL COMMENT '创建人ID教师ID'
AFTER question_count;
```
### 第3步查找你的用户ID
```sql
SELECT user_id, user_name, nick_name
FROM sys_user
WHERE user_name = 'admin'; -- 替换为你的登录用户名
```
记住返回的 `user_id`,例如:**1**
### 第4步自动修复题库关联
```sql
-- 方法A根据创建者用户名自动关联
UPDATE study_question_bank b
INNER JOIN sys_user u ON b.create_by = u.user_name
SET b.create_user_id = u.user_id
WHERE b.create_user_id IS NULL;
```
**或者**手动设置:
```sql
-- 方法B手动设置为你的用户ID
UPDATE study_question_bank
SET create_user_id = 1 -- ⚠️ 替换为你的实际用户ID
WHERE create_user_id IS NULL;
```
### 第5步验证修复
```sql
-- 查询你的题库替换用户ID
SELECT
id,
bank_name,
subject_name,
question_count,
create_user_id,
create_time
FROM study_question_bank
WHERE create_user_id = 1 -- ⚠️ 替换为你的用户ID
ORDER BY create_time DESC;
```
**如果有结果,说明修复成功!**
### 第6步刷新前端页面
1. 刷新浏览器
2. 进入【考试管理】→【创建考试】
3. 选择出题方式为【从题库抽取】
4. 下拉框应该能看到题库了
## 📝 详细诊断脚本
我已经创建了两个SQL脚本
1. **`检查题库问题.sql`** - 完整的诊断脚本
2. **`修复题库导入问题.sql`** - 一步步的修复方案
请按顺序执行SQL语句根据实际情况选择合适的修复方法。
## ⚠️ 注意事项
### 关键字段说明
| 字段 | 说明 | 重要性 |
|------|------|--------|
| `create_user_id` | 创建者的用户ID | ⭐⭐⭐ 必须有 |
| `create_by` | 创建者的用户名 | 用于自动关联 |
| `question_count` | 题目数量 | 如果不准确会影响显示 |
### 执行SQL的注意事项
1. **备份数据**执行UPDATE前先备份数据库
2. **确认用户ID**确保使用正确的用户ID
3. **测试验证**修复后用验证SQL确认结果
## 🚀 预防措施
### 后端代码已修复
Controller 中新增题库时会自动设置 `create_user_id`
```java
@PostMapping
public AjaxResult add(@RequestBody StudyQuestionBank questionBank) {
questionBank.setCreateBy(getUsername());
questionBank.setCreateUserId(getUserId()); // ✓ 已添加
return toAjax(questionBankService.insertQuestionBank(questionBank));
}
```
### 今后创建题库
后端代码已经修复,**今后新建的题库会自动关联用户ID**,不会再出现这个问题。
## 🆘 如果仍然无法解决
### 检查清单
- [ ] 数据库表有 `create_user_id` 字段
- [ ] 题库的 `create_user_id` 不为空
- [ ] 题库的 `create_user_id` 与当前登录用户ID一致
- [ ] 题库中有题目(`question_count > 0`
- [ ] 浏览器控制台无错误
- [ ] 已清除浏览器缓存
### 调试方法
1. **查看浏览器控制台**
- 打开开发者工具 (F12)
- 查看 Network 标签
- 找到 `/study/questionBank/my-banks` 请求
- 查看返回的数据是否为空
2. **查看后端日志**
```
Study-Vue-redis/ry-study-admin/logs/sys-info.log
```
搜索 "my-banks" 或 "questionBank"
3. **手动测试接口**
```bash
# 使用 Postman 或浏览器访问
http://192.168.137.1:30091/study/questionBank/my-banks
```
## 📌 总结
**根本原因**:题库的 `create_user_id` 字段为空或不匹配
**快速修复**:运行 `修复题库导入问题.sql` 中的SQL
**预防措施**:后端代码已修复,新建题库会自动关联用户
---
如有任何问题请查看SQL脚本中的详细说明或联系技术支持。