-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathseed-data.sql
More file actions
358 lines (334 loc) · 31.5 KB
/
Copy pathseed-data.sql
File metadata and controls
358 lines (334 loc) · 31.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
-- Smart Guide demo seed data.
-- Purpose: build a richer cross-industry course catalog and behavior dataset
-- so recommendations, statistics, and dashboard charts have visible data.
-- Safe to run more than once with:
-- cmd /c "mysql -u root -p smart_guide < seed-data.sql"
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- Categories: keep the original technical categories and add non-computer majors.
INSERT INTO category (id, name) VALUES
(1, '程序设计'),
(2, '前端开发'),
(3, '计算机基础'),
(4, '算法'),
(5, '数据库'),
(6, '金融经济'),
(7, '企业管理'),
(8, '设计创意'),
(9, '医学健康'),
(10, '教育心理'),
(11, '法律实务'),
(12, '语言人文'),
(13, '智能制造'),
(14, '农业与环境')
ON DUPLICATE KEY UPDATE
name = VALUES(name);
-- Student accounts. user.id is assigned manually in this project.
INSERT INTO `user` (id, username, password, role, nickname, email, create_time) VALUES
(3, 'student_alice', '123456', 'student', '张明', 'student_alice@example.com', DATE_SUB(NOW(), INTERVAL 29 DAY)),
(4, 'student_bob', '123456', 'student', '李华', 'student_bob@example.com', DATE_SUB(NOW(), INTERVAL 27 DAY)),
(5, 'student_carol', '123456', 'student', '王芳', 'student_carol@example.com', DATE_SUB(NOW(), INTERVAL 24 DAY)),
(6, 'student_david', '123456', 'student', '赵磊', 'student_david@example.com', DATE_SUB(NOW(), INTERVAL 21 DAY)),
(7, 'student_emma', '123456', 'student', '陈思', 'student_emma@example.com', DATE_SUB(NOW(), INTERVAL 18 DAY)),
(8, 'student_frank', '123456', 'student', '刘洋', 'student_frank@example.com', DATE_SUB(NOW(), INTERVAL 15 DAY)),
(9, 'student_grace', '123456', 'student', '孙静', 'student_grace@example.com', DATE_SUB(NOW(), INTERVAL 12 DAY)),
(10, 'student_henry', '123456', 'student', '周涛', 'student_henry@example.com', DATE_SUB(NOW(), INTERVAL 9 DAY)),
(11, 'student_iris', '123456', 'student', '吴悦', 'student_iris@example.com', DATE_SUB(NOW(), INTERVAL 6 DAY)),
(12, 'student_jack', '123456', 'student', '郑凯', 'student_jack@example.com', DATE_SUB(NOW(), INTERVAL 3 DAY))
ON DUPLICATE KEY UPDATE
password = VALUES(password),
role = VALUES(role),
nickname = VALUES(nickname),
email = VALUES(email),
create_time = VALUES(create_time);
-- Course pool: 36 courses across technology, business, health, education, law, humanities, manufacturing, and agriculture.
INSERT INTO course (id, title, description, category, video_url, create_time) VALUES
(1, 'Java 基础入门', '从变量、流程控制、面向对象和集合开始,建立 Java 编程基础。适合零基础学习者。', '程序设计', NULL, DATE_SUB(NOW(), INTERVAL 30 DAY)),
(2, 'Vue.js 实战教程', '围绕 Vue 3、组件通信、路由和项目组织,完成一个可运行的前端页面。', '前端开发', NULL, DATE_SUB(NOW(), INTERVAL 29 DAY)),
(3, '数据结构与算法', '讲解数组、链表、栈、队列、树和排序算法,帮助理解常见问题模型。', '算法', NULL, DATE_SUB(NOW(), INTERVAL 28 DAY)),
(4, 'Python 基础', '学习 Python 语法、函数、模块和文件处理,为自动化办公和数据分析打基础。', '程序设计', NULL, DATE_SUB(NOW(), INTERVAL 27 DAY)),
(5, 'Java 进阶之路', '面向已有 Java 基础的同学,讲解集合、异常、泛型和常用设计思路。适合衔接 Spring Boot 学习。', '程序设计', NULL, DATE_SUB(NOW(), INTERVAL 26 DAY)),
(6, 'Spring Boot 实战', '从控制器、服务层到 JPA 持久化,完成一个可运行的后端小项目。', '程序设计', NULL, DATE_SUB(NOW(), INTERVAL 25 DAY)),
(7, 'Python 数据分析入门', '使用 Python 处理表格数据、绘制基础图表,并理解常见分析流程。', '程序设计', NULL, DATE_SUB(NOW(), INTERVAL 24 DAY)),
(8, 'React 入门到精通', '覆盖组件、Hooks、路由和状态管理,帮助前端同学建立 React 项目能力。', '前端开发', NULL, DATE_SUB(NOW(), INTERVAL 23 DAY)),
(9, 'TypeScript 工程实践', '讲解类型系统、接口设计和 Vue/React 项目中的类型组织方式。', '前端开发', NULL, DATE_SUB(NOW(), INTERVAL 22 DAY)),
(10, '前端性能优化', '从资源加载、渲染性能和缓存策略入手,提升真实页面访问体验。', '前端开发', NULL, DATE_SUB(NOW(), INTERVAL 21 DAY)),
(11, '数据结构与算法训练营', '用案例练习数组、链表、栈、队列、树和图的常见题型。', '算法', NULL, DATE_SUB(NOW(), INTERVAL 20 DAY)),
(12, '算法复杂度分析', '理解时间复杂度、空间复杂度和常见优化技巧,为刷题和工程设计打基础。', '算法', NULL, DATE_SUB(NOW(), INTERVAL 19 DAY)),
(13, 'MySQL 从入门到优化', '系统学习 SQL、索引、事务和执行计划,掌握常见数据库优化手段。', '数据库', NULL, DATE_SUB(NOW(), INTERVAL 18 DAY)),
(14, 'Linux 命令行基础', '学习文件、进程、权限、网络排查等常用命令,提升日常开发效率。', '计算机基础', NULL, DATE_SUB(NOW(), INTERVAL 17 DAY)),
(15, '计算机网络原理', '围绕 TCP/IP、HTTP、DNS 和常见网络问题建立基础知识框架。', '计算机基础', NULL, DATE_SUB(NOW(), INTERVAL 16 DAY)),
(16, '操作系统核心概念', '用通俗案例理解进程、线程、内存管理和文件系统。', '计算机基础', NULL, DATE_SUB(NOW(), INTERVAL 15 DAY)),
(17, '金融市场基础', '介绍股票、债券、基金和衍生品的基本概念,帮助理解金融市场运行逻辑。', '金融经济', NULL, DATE_SUB(NOW(), INTERVAL 14 DAY)),
(18, '个人理财与资产配置', '学习预算、保险、基金定投和风险评估,建立长期理财规划能力。', '金融经济', NULL, DATE_SUB(NOW(), INTERVAL 14 DAY)),
(19, '宏观经济学入门', '从 GDP、通货膨胀、就业和货币政策出发,理解经济周期和政策影响。', '金融经济', NULL, DATE_SUB(NOW(), INTERVAL 13 DAY)),
(20, '项目管理实务', '围绕目标拆解、进度控制、风险管理和复盘机制,提升项目交付能力。', '企业管理', NULL, DATE_SUB(NOW(), INTERVAL 13 DAY)),
(21, '市场营销策略', '讲解用户洞察、定位、渠道、内容和增长指标,适合商业与运营方向学习。', '企业管理', NULL, DATE_SUB(NOW(), INTERVAL 12 DAY)),
(22, '人力资源管理基础', '覆盖招聘、绩效、培训和组织文化,建立企业人力资源管理框架。', '企业管理', NULL, DATE_SUB(NOW(), INTERVAL 12 DAY)),
(23, 'UI 设计基础', '学习版式、色彩、组件和交互规范,完成移动端界面设计练习。', '设计创意', NULL, DATE_SUB(NOW(), INTERVAL 11 DAY)),
(24, '摄影构图与后期', '从光线、构图和色彩调整入手,提升日常摄影和视觉表达能力。', '设计创意', NULL, DATE_SUB(NOW(), INTERVAL 11 DAY)),
(25, '短视频脚本与剪辑', '学习选题、脚本结构、镜头节奏和剪辑流程,适合内容创作者入门。', '设计创意', NULL, DATE_SUB(NOW(), INTERVAL 10 DAY)),
(26, '临床医学导论', '介绍常见临床科室、诊疗流程和医学伦理,帮助建立医学学习全局观。', '医学健康', NULL, DATE_SUB(NOW(), INTERVAL 10 DAY)),
(27, '营养学与健康管理', '围绕膳食结构、体重管理和慢病预防,学习实用健康管理方法。', '医学健康', NULL, DATE_SUB(NOW(), INTERVAL 9 DAY)),
(28, '急救技能基础', '讲解心肺复苏、创伤处理和常见突发情况应对,强调场景化练习。', '医学健康', NULL, DATE_SUB(NOW(), INTERVAL 9 DAY)),
(29, '教育心理学', '从学习动机、认知发展和课堂互动出发,理解学习行为背后的心理机制。', '教育心理', NULL, DATE_SUB(NOW(), INTERVAL 8 DAY)),
(30, '课程设计与教学评价', '学习目标设计、活动组织、作业反馈和评价量表,适合教师与培训师。', '教育心理', NULL, DATE_SUB(NOW(), INTERVAL 8 DAY)),
(31, '民法典实务入门', '通过合同、侵权、婚姻家庭等案例理解民法典的基本规则。', '法律实务', NULL, DATE_SUB(NOW(), INTERVAL 7 DAY)),
(32, '劳动法与职场权益', '讲解劳动合同、工时、社保、仲裁和常见职场法律风险。', '法律实务', NULL, DATE_SUB(NOW(), INTERVAL 7 DAY)),
(33, '商务英语沟通', '围绕邮件、会议、展示和谈判场景,训练实用商务英语表达。', '语言人文', NULL, DATE_SUB(NOW(), INTERVAL 6 DAY)),
(34, '中国传统文化概论', '从思想、文学、艺术和礼俗入手,理解传统文化的主要脉络。', '语言人文', NULL, DATE_SUB(NOW(), INTERVAL 6 DAY)),
(35, '智能制造与工业互联网', '介绍传感器、设备联网、生产数据和数字化工厂的基础应用。', '智能制造', NULL, DATE_SUB(NOW(), INTERVAL 5 DAY)),
(36, '现代农业与环境保护', '学习智慧农业、土壤保护、节水灌溉和农业可持续发展案例。', '农业与环境', NULL, DATE_SUB(NOW(), INTERVAL 5 DAY))
ON DUPLICATE KEY UPDATE
title = VALUES(title),
description = VALUES(description),
category = VALUES(category),
video_url = VALUES(video_url),
create_time = VALUES(create_time);
-- Learning records: broad overlaps across majors make recommendation output less single-domain.
INSERT INTO learning_record (id, user_id, course_id, progress, last_study_time) VALUES
(1001, 3, 1, 100, DATE_SUB(NOW(), INTERVAL 13 DAY)),
(1002, 3, 5, 75, DATE_SUB(NOW(), INTERVAL 5 DAY)),
(1003, 3, 6, 35, DATE_SUB(NOW(), INTERVAL 2 DAY)),
(1004, 3, 13, 15, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(1005, 3, 20, 60, DATE_SUB(NOW(), INTERVAL 4 DAY)),
(1006, 3, 23, 25, DATE_SUB(NOW(), INTERVAL 3 DAY)),
(1007, 3, 33, 80, DATE_SUB(NOW(), INTERVAL 6 DAY)),
(1010, 4, 2, 100, DATE_SUB(NOW(), INTERVAL 12 DAY)),
(1011, 4, 8, 65, DATE_SUB(NOW(), INTERVAL 6 DAY)),
(1012, 4, 9, 30, DATE_SUB(NOW(), INTERVAL 3 DAY)),
(1013, 4, 10, 10, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(1014, 4, 21, 55, DATE_SUB(NOW(), INTERVAL 5 DAY)),
(1015, 4, 25, 90, DATE_SUB(NOW(), INTERVAL 7 DAY)),
(1016, 4, 33, 35, DATE_SUB(NOW(), INTERVAL 2 DAY)),
(1020, 5, 3, 100, DATE_SUB(NOW(), INTERVAL 11 DAY)),
(1021, 5, 11, 80, DATE_SUB(NOW(), INTERVAL 4 DAY)),
(1022, 5, 12, 55, DATE_SUB(NOW(), INTERVAL 2 DAY)),
(1023, 5, 6, 20, DATE_SUB(NOW(), INTERVAL 9 DAY)),
(1024, 5, 17, 65, DATE_SUB(NOW(), INTERVAL 6 DAY)),
(1025, 5, 18, 30, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(1026, 5, 31, 45, DATE_SUB(NOW(), INTERVAL 3 DAY)),
(1030, 6, 1, 90, DATE_SUB(NOW(), INTERVAL 10 DAY)),
(1031, 6, 5, 100, DATE_SUB(NOW(), INTERVAL 7 DAY)),
(1032, 6, 6, 70, DATE_SUB(NOW(), INTERVAL 3 DAY)),
(1033, 6, 7, 25, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(1034, 6, 13, 40, DATE_SUB(NOW(), INTERVAL 5 DAY)),
(1035, 6, 20, 85, DATE_SUB(NOW(), INTERVAL 8 DAY)),
(1036, 6, 35, 20, DATE_SUB(NOW(), INTERVAL 2 DAY)),
(1040, 7, 2, 85, DATE_SUB(NOW(), INTERVAL 9 DAY)),
(1041, 7, 8, 100, DATE_SUB(NOW(), INTERVAL 6 DAY)),
(1042, 7, 9, 60, DATE_SUB(NOW(), INTERVAL 4 DAY)),
(1043, 7, 10, 20, DATE_SUB(NOW(), INTERVAL 2 DAY)),
(1044, 7, 14, 35, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(1045, 7, 23, 95, DATE_SUB(NOW(), INTERVAL 7 DAY)),
(1046, 7, 24, 50, DATE_SUB(NOW(), INTERVAL 3 DAY)),
(1047, 7, 25, 30, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(1050, 8, 3, 75, DATE_SUB(NOW(), INTERVAL 8 DAY)),
(1051, 8, 11, 100, DATE_SUB(NOW(), INTERVAL 6 DAY)),
(1052, 8, 12, 30, DATE_SUB(NOW(), INTERVAL 3 DAY)),
(1053, 8, 15, 65, DATE_SUB(NOW(), INTERVAL 2 DAY)),
(1054, 8, 26, 55, DATE_SUB(NOW(), INTERVAL 5 DAY)),
(1055, 8, 27, 80, DATE_SUB(NOW(), INTERVAL 4 DAY)),
(1056, 8, 28, 25, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(1060, 9, 4, 100, DATE_SUB(NOW(), INTERVAL 8 DAY)),
(1061, 9, 7, 55, DATE_SUB(NOW(), INTERVAL 5 DAY)),
(1062, 9, 13, 90, DATE_SUB(NOW(), INTERVAL 3 DAY)),
(1063, 9, 16, 20, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(1064, 9, 17, 45, DATE_SUB(NOW(), INTERVAL 6 DAY)),
(1065, 9, 19, 70, DATE_SUB(NOW(), INTERVAL 4 DAY)),
(1066, 9, 36, 35, DATE_SUB(NOW(), INTERVAL 2 DAY)),
(1070, 10, 1, 45, DATE_SUB(NOW(), INTERVAL 7 DAY)),
(1071, 10, 5, 20, DATE_SUB(NOW(), INTERVAL 6 DAY)),
(1072, 10, 11, 70, DATE_SUB(NOW(), INTERVAL 4 DAY)),
(1073, 10, 12, 100, DATE_SUB(NOW(), INTERVAL 2 DAY)),
(1074, 10, 15, 15, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(1075, 10, 29, 85, DATE_SUB(NOW(), INTERVAL 5 DAY)),
(1076, 10, 30, 40, DATE_SUB(NOW(), INTERVAL 3 DAY)),
(1077, 10, 34, 60, DATE_SUB(NOW(), INTERVAL 2 DAY)),
(1080, 11, 2, 35, DATE_SUB(NOW(), INTERVAL 6 DAY)),
(1081, 11, 8, 55, DATE_SUB(NOW(), INTERVAL 4 DAY)),
(1082, 11, 9, 100, DATE_SUB(NOW(), INTERVAL 3 DAY)),
(1083, 11, 10, 75, DATE_SUB(NOW(), INTERVAL 2 DAY)),
(1084, 11, 14, 20, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(1085, 11, 21, 70, DATE_SUB(NOW(), INTERVAL 5 DAY)),
(1086, 11, 22, 30, DATE_SUB(NOW(), INTERVAL 2 DAY)),
(1087, 11, 32, 50, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(1090, 12, 3, 20, DATE_SUB(NOW(), INTERVAL 5 DAY)),
(1091, 12, 6, 50, DATE_SUB(NOW(), INTERVAL 4 DAY)),
(1092, 12, 11, 90, DATE_SUB(NOW(), INTERVAL 3 DAY)),
(1093, 12, 13, 100, DATE_SUB(NOW(), INTERVAL 2 DAY)),
(1094, 12, 16, 35, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(1095, 12, 31, 60, DATE_SUB(NOW(), INTERVAL 4 DAY)),
(1096, 12, 32, 25, DATE_SUB(NOW(), INTERVAL 2 DAY)),
(1097, 12, 35, 45, DATE_SUB(NOW(), INTERVAL 1 DAY))
ON DUPLICATE KEY UPDATE
progress = VALUES(progress),
last_study_time = VALUES(last_study_time);
-- Favorites use the existing unique key uk_user_course.
INSERT IGNORE INTO favorite (user_id, course_id, create_time) VALUES
(3, 6, DATE_SUB(NOW(), INTERVAL 4 DAY)), (3, 20, DATE_SUB(NOW(), INTERVAL 3 DAY)), (3, 33, DATE_SUB(NOW(), INTERVAL 2 DAY)),
(4, 8, DATE_SUB(NOW(), INTERVAL 5 DAY)), (4, 21, DATE_SUB(NOW(), INTERVAL 3 DAY)), (4, 25, DATE_SUB(NOW(), INTERVAL 2 DAY)),
(5, 11, DATE_SUB(NOW(), INTERVAL 4 DAY)), (5, 17, DATE_SUB(NOW(), INTERVAL 3 DAY)), (5, 31, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(6, 6, DATE_SUB(NOW(), INTERVAL 6 DAY)), (6, 20, DATE_SUB(NOW(), INTERVAL 3 DAY)), (6, 35, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(7, 8, DATE_SUB(NOW(), INTERVAL 5 DAY)), (7, 23, DATE_SUB(NOW(), INTERVAL 3 DAY)), (7, 24, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(8, 11, DATE_SUB(NOW(), INTERVAL 4 DAY)), (8, 26, DATE_SUB(NOW(), INTERVAL 3 DAY)), (8, 27, DATE_SUB(NOW(), INTERVAL 2 DAY)),
(9, 7, DATE_SUB(NOW(), INTERVAL 3 DAY)), (9, 17, DATE_SUB(NOW(), INTERVAL 2 DAY)), (9, 36, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(10, 12, DATE_SUB(NOW(), INTERVAL 4 DAY)), (10, 29, DATE_SUB(NOW(), INTERVAL 2 DAY)), (10, 34, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(11, 9, DATE_SUB(NOW(), INTERVAL 3 DAY)), (11, 21, DATE_SUB(NOW(), INTERVAL 2 DAY)), (11, 32, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(12, 13, DATE_SUB(NOW(), INTERVAL 4 DAY)), (12, 31, DATE_SUB(NOW(), INTERVAL 2 DAY)), (12, 35, DATE_SUB(NOW(), INTERVAL 1 DAY));
-- More students grouped by simulated majors. Their course choices are intentionally different.
INSERT INTO `user` (id, username, password, role, nickname, email, create_time) VALUES
(13, 'student_fin_01', '123456', 'student', '林若溪', 'student_fin_01@example.com', DATE_SUB(NOW(), INTERVAL 30 DAY)),
(14, 'student_fin_02', '123456', 'student', '何嘉诚', 'student_fin_02@example.com', DATE_SUB(NOW(), INTERVAL 28 DAY)),
(15, 'student_fin_03', '123456', 'student', '宋雨晴', 'student_fin_03@example.com', DATE_SUB(NOW(), INTERVAL 25 DAY)),
(16, 'student_fin_04', '123456', 'student', '梁志远', 'student_fin_04@example.com', DATE_SUB(NOW(), INTERVAL 22 DAY)),
(17, 'student_biz_01', '123456', 'student', '唐一诺', 'student_biz_01@example.com', DATE_SUB(NOW(), INTERVAL 29 DAY)),
(18, 'student_biz_02', '123456', 'student', '许晨阳', 'student_biz_02@example.com', DATE_SUB(NOW(), INTERVAL 26 DAY)),
(19, 'student_biz_03', '123456', 'student', '蒋思源', 'student_biz_03@example.com', DATE_SUB(NOW(), INTERVAL 23 DAY)),
(20, 'student_biz_04', '123456', 'student', '罗欣怡', 'student_biz_04@example.com', DATE_SUB(NOW(), INTERVAL 20 DAY)),
(21, 'student_art_01', '123456', 'student', '叶子涵', 'student_art_01@example.com', DATE_SUB(NOW(), INTERVAL 27 DAY)),
(22, 'student_art_02', '123456', 'student', '高雅楠', 'student_art_02@example.com', DATE_SUB(NOW(), INTERVAL 24 DAY)),
(23, 'student_art_03', '123456', 'student', '邱泽宇', 'student_art_03@example.com', DATE_SUB(NOW(), INTERVAL 21 DAY)),
(24, 'student_art_04', '123456', 'student', '白若琳', 'student_art_04@example.com', DATE_SUB(NOW(), INTERVAL 18 DAY)),
(25, 'student_med_01', '123456', 'student', '秦安然', 'student_med_01@example.com', DATE_SUB(NOW(), INTERVAL 26 DAY)),
(26, 'student_med_02', '123456', 'student', '孟子航', 'student_med_02@example.com', DATE_SUB(NOW(), INTERVAL 23 DAY)),
(27, 'student_med_03', '123456', 'student', '丁语桐', 'student_med_03@example.com', DATE_SUB(NOW(), INTERVAL 20 DAY)),
(28, 'student_med_04', '123456', 'student', '姚嘉宁', 'student_med_04@example.com', DATE_SUB(NOW(), INTERVAL 17 DAY)),
(29, 'student_edu_01', '123456', 'student', '韩清越', 'student_edu_01@example.com', DATE_SUB(NOW(), INTERVAL 25 DAY)),
(30, 'student_edu_02', '123456', 'student', '傅明轩', 'student_edu_02@example.com', DATE_SUB(NOW(), INTERVAL 22 DAY)),
(31, 'student_law_01', '123456', 'student', '程知夏', 'student_law_01@example.com', DATE_SUB(NOW(), INTERVAL 19 DAY)),
(32, 'student_law_02', '123456', 'student', '薛景行', 'student_law_02@example.com', DATE_SUB(NOW(), INTERVAL 16 DAY)),
(33, 'student_lang_01', '123456', 'student', '苏沐橙', 'student_lang_01@example.com', DATE_SUB(NOW(), INTERVAL 24 DAY)),
(34, 'student_lang_02', '123456', 'student', '陆文博', 'student_lang_02@example.com', DATE_SUB(NOW(), INTERVAL 21 DAY)),
(35, 'student_eng_01', '123456', 'student', '沈星河', 'student_eng_01@example.com', DATE_SUB(NOW(), INTERVAL 23 DAY)),
(36, 'student_eng_02', '123456', 'student', '贺云帆', 'student_eng_02@example.com', DATE_SUB(NOW(), INTERVAL 20 DAY)),
(37, 'student_eng_03', '123456', 'student', '范思远', 'student_eng_03@example.com', DATE_SUB(NOW(), INTERVAL 17 DAY)),
(38, 'student_eng_04', '123456', 'student', '余佳航', 'student_eng_04@example.com', DATE_SUB(NOW(), INTERVAL 14 DAY)),
(39, 'student_agri_01', '123456', 'student', '田雨禾', 'student_agri_01@example.com', DATE_SUB(NOW(), INTERVAL 18 DAY)),
(40, 'student_agri_02', '123456', 'student', '袁青禾', 'student_agri_02@example.com', DATE_SUB(NOW(), INTERVAL 15 DAY)),
(41, 'student_mix_01', '123456', 'student', '顾星辰', 'student_mix_01@example.com', DATE_SUB(NOW(), INTERVAL 12 DAY)),
(42, 'student_mix_02', '123456', 'student', '夏知微', 'student_mix_02@example.com', DATE_SUB(NOW(), INTERVAL 10 DAY))
ON DUPLICATE KEY UPDATE
password = VALUES(password),
role = VALUES(role),
nickname = VALUES(nickname),
email = VALUES(email),
create_time = VALUES(create_time);
-- Major-like learning paths for the additional students.
INSERT INTO learning_record (id, user_id, course_id, progress, last_study_time) VALUES
-- Finance and economics students.
(2001, 13, 17, 100, DATE_SUB(NOW(), INTERVAL 11 DAY)), (2002, 13, 18, 75, DATE_SUB(NOW(), INTERVAL 6 DAY)), (2003, 13, 19, 45, DATE_SUB(NOW(), INTERVAL 3 DAY)), (2004, 13, 31, 35, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2005, 13, 13, 20, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2006, 14, 17, 80, DATE_SUB(NOW(), INTERVAL 10 DAY)), (2007, 14, 18, 100, DATE_SUB(NOW(), INTERVAL 7 DAY)), (2008, 14, 19, 60, DATE_SUB(NOW(), INTERVAL 4 DAY)), (2009, 14, 21, 40, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2010, 14, 33, 25, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2011, 15, 17, 55, DATE_SUB(NOW(), INTERVAL 9 DAY)), (2012, 15, 18, 30, DATE_SUB(NOW(), INTERVAL 5 DAY)), (2013, 15, 19, 100, DATE_SUB(NOW(), INTERVAL 3 DAY)), (2014, 15, 32, 65, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2015, 15, 7, 35, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2016, 16, 17, 35, DATE_SUB(NOW(), INTERVAL 8 DAY)), (2017, 16, 18, 65, DATE_SUB(NOW(), INTERVAL 5 DAY)), (2018, 16, 19, 80, DATE_SUB(NOW(), INTERVAL 3 DAY)), (2019, 16, 13, 50, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2020, 16, 20, 20, DATE_SUB(NOW(), INTERVAL 1 DAY)),
-- Business management students.
(2021, 17, 20, 100, DATE_SUB(NOW(), INTERVAL 12 DAY)), (2022, 17, 21, 70, DATE_SUB(NOW(), INTERVAL 6 DAY)), (2023, 17, 22, 45, DATE_SUB(NOW(), INTERVAL 3 DAY)), (2024, 17, 18, 25, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2025, 17, 33, 55, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2026, 18, 20, 65, DATE_SUB(NOW(), INTERVAL 10 DAY)), (2027, 18, 21, 100, DATE_SUB(NOW(), INTERVAL 7 DAY)), (2028, 18, 22, 75, DATE_SUB(NOW(), INTERVAL 4 DAY)), (2029, 18, 25, 40, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2030, 18, 32, 15, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2031, 19, 20, 35, DATE_SUB(NOW(), INTERVAL 9 DAY)), (2032, 19, 21, 80, DATE_SUB(NOW(), INTERVAL 5 DAY)), (2033, 19, 22, 100, DATE_SUB(NOW(), INTERVAL 3 DAY)), (2034, 19, 17, 30, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2035, 19, 29, 45, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2036, 20, 20, 90, DATE_SUB(NOW(), INTERVAL 8 DAY)), (2037, 20, 21, 50, DATE_SUB(NOW(), INTERVAL 5 DAY)), (2038, 20, 22, 25, DATE_SUB(NOW(), INTERVAL 3 DAY)), (2039, 20, 23, 60, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2040, 20, 33, 35, DATE_SUB(NOW(), INTERVAL 1 DAY)),
-- Design and media students.
(2041, 21, 23, 100, DATE_SUB(NOW(), INTERVAL 12 DAY)), (2042, 21, 24, 75, DATE_SUB(NOW(), INTERVAL 6 DAY)), (2043, 21, 25, 55, DATE_SUB(NOW(), INTERVAL 3 DAY)), (2044, 21, 21, 45, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2045, 21, 2, 20, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2046, 22, 23, 70, DATE_SUB(NOW(), INTERVAL 10 DAY)), (2047, 22, 24, 100, DATE_SUB(NOW(), INTERVAL 7 DAY)), (2048, 22, 25, 80, DATE_SUB(NOW(), INTERVAL 4 DAY)), (2049, 22, 10, 35, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2050, 22, 34, 45, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2051, 23, 23, 45, DATE_SUB(NOW(), INTERVAL 9 DAY)), (2052, 23, 24, 60, DATE_SUB(NOW(), INTERVAL 5 DAY)), (2053, 23, 25, 100, DATE_SUB(NOW(), INTERVAL 3 DAY)), (2054, 23, 8, 25, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2055, 23, 21, 70, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2056, 24, 23, 30, DATE_SUB(NOW(), INTERVAL 8 DAY)), (2057, 24, 24, 50, DATE_SUB(NOW(), INTERVAL 5 DAY)), (2058, 24, 25, 85, DATE_SUB(NOW(), INTERVAL 3 DAY)), (2059, 24, 33, 40, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2060, 24, 34, 20, DATE_SUB(NOW(), INTERVAL 1 DAY)),
-- Medicine and health students.
(2061, 25, 26, 100, DATE_SUB(NOW(), INTERVAL 12 DAY)), (2062, 25, 27, 75, DATE_SUB(NOW(), INTERVAL 6 DAY)), (2063, 25, 28, 55, DATE_SUB(NOW(), INTERVAL 3 DAY)), (2064, 25, 29, 35, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2065, 25, 33, 25, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2066, 26, 26, 80, DATE_SUB(NOW(), INTERVAL 10 DAY)), (2067, 26, 27, 100, DATE_SUB(NOW(), INTERVAL 7 DAY)), (2068, 26, 28, 65, DATE_SUB(NOW(), INTERVAL 4 DAY)), (2069, 26, 30, 30, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2070, 26, 18, 20, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2071, 27, 26, 55, DATE_SUB(NOW(), INTERVAL 9 DAY)), (2072, 27, 27, 40, DATE_SUB(NOW(), INTERVAL 5 DAY)), (2073, 27, 28, 100, DATE_SUB(NOW(), INTERVAL 3 DAY)), (2074, 27, 29, 70, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2075, 27, 34, 25, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2076, 28, 26, 35, DATE_SUB(NOW(), INTERVAL 8 DAY)), (2077, 28, 27, 60, DATE_SUB(NOW(), INTERVAL 5 DAY)), (2078, 28, 28, 80, DATE_SUB(NOW(), INTERVAL 3 DAY)), (2079, 28, 30, 45, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2080, 28, 17, 15, DATE_SUB(NOW(), INTERVAL 1 DAY)),
-- Education, law, language, engineering, agriculture, and interdisciplinary students.
(2081, 29, 29, 100, DATE_SUB(NOW(), INTERVAL 9 DAY)), (2082, 29, 30, 70, DATE_SUB(NOW(), INTERVAL 5 DAY)), (2083, 29, 34, 50, DATE_SUB(NOW(), INTERVAL 3 DAY)), (2084, 29, 33, 35, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2085, 30, 29, 60, DATE_SUB(NOW(), INTERVAL 8 DAY)), (2086, 30, 30, 100, DATE_SUB(NOW(), INTERVAL 4 DAY)), (2087, 30, 22, 45, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2088, 30, 23, 20, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2089, 31, 31, 100, DATE_SUB(NOW(), INTERVAL 9 DAY)), (2090, 31, 32, 75, DATE_SUB(NOW(), INTERVAL 5 DAY)), (2091, 31, 17, 35, DATE_SUB(NOW(), INTERVAL 3 DAY)), (2092, 31, 22, 45, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2093, 32, 31, 65, DATE_SUB(NOW(), INTERVAL 8 DAY)), (2094, 32, 32, 100, DATE_SUB(NOW(), INTERVAL 4 DAY)), (2095, 32, 19, 30, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2096, 32, 33, 55, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2097, 33, 33, 100, DATE_SUB(NOW(), INTERVAL 9 DAY)), (2098, 33, 34, 70, DATE_SUB(NOW(), INTERVAL 5 DAY)), (2099, 33, 21, 35, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2100, 33, 24, 45, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2101, 34, 33, 65, DATE_SUB(NOW(), INTERVAL 8 DAY)), (2102, 34, 34, 100, DATE_SUB(NOW(), INTERVAL 4 DAY)), (2103, 34, 31, 25, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2104, 34, 29, 40, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2105, 35, 35, 100, DATE_SUB(NOW(), INTERVAL 10 DAY)), (2106, 35, 14, 70, DATE_SUB(NOW(), INTERVAL 5 DAY)), (2107, 35, 15, 55, DATE_SUB(NOW(), INTERVAL 3 DAY)), (2108, 35, 16, 35, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2109, 36, 35, 80, DATE_SUB(NOW(), INTERVAL 9 DAY)), (2110, 36, 13, 50, DATE_SUB(NOW(), INTERVAL 5 DAY)), (2111, 36, 7, 45, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2112, 36, 20, 25, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2113, 37, 35, 65, DATE_SUB(NOW(), INTERVAL 8 DAY)), (2114, 37, 6, 35, DATE_SUB(NOW(), INTERVAL 4 DAY)), (2115, 37, 15, 100, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2116, 37, 36, 45, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2117, 38, 35, 45, DATE_SUB(NOW(), INTERVAL 7 DAY)), (2118, 38, 16, 80, DATE_SUB(NOW(), INTERVAL 4 DAY)), (2119, 38, 14, 100, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2120, 38, 13, 30, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2121, 39, 36, 100, DATE_SUB(NOW(), INTERVAL 8 DAY)), (2122, 39, 27, 45, DATE_SUB(NOW(), INTERVAL 4 DAY)), (2123, 39, 19, 30, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2124, 39, 35, 55, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2125, 40, 36, 80, DATE_SUB(NOW(), INTERVAL 7 DAY)), (2126, 40, 26, 35, DATE_SUB(NOW(), INTERVAL 4 DAY)), (2127, 40, 18, 50, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2128, 40, 34, 20, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2129, 41, 7, 70, DATE_SUB(NOW(), INTERVAL 6 DAY)), (2130, 41, 18, 60, DATE_SUB(NOW(), INTERVAL 4 DAY)), (2131, 41, 23, 50, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2132, 41, 29, 40, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(2133, 42, 20, 65, DATE_SUB(NOW(), INTERVAL 6 DAY)), (2134, 42, 26, 55, DATE_SUB(NOW(), INTERVAL 4 DAY)), (2135, 42, 31, 45, DATE_SUB(NOW(), INTERVAL 2 DAY)), (2136, 42, 35, 35, DATE_SUB(NOW(), INTERVAL 1 DAY))
ON DUPLICATE KEY UPDATE
progress = VALUES(progress),
last_study_time = VALUES(last_study_time);
-- Favorites for the additional students.
INSERT IGNORE INTO favorite (user_id, course_id, create_time) VALUES
(13, 17, DATE_SUB(NOW(), INTERVAL 5 DAY)), (13, 18, DATE_SUB(NOW(), INTERVAL 2 DAY)),
(14, 18, DATE_SUB(NOW(), INTERVAL 4 DAY)), (14, 33, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(15, 19, DATE_SUB(NOW(), INTERVAL 3 DAY)), (15, 32, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(16, 17, DATE_SUB(NOW(), INTERVAL 3 DAY)), (16, 13, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(17, 20, DATE_SUB(NOW(), INTERVAL 5 DAY)), (17, 21, DATE_SUB(NOW(), INTERVAL 2 DAY)),
(18, 21, DATE_SUB(NOW(), INTERVAL 4 DAY)), (18, 22, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(19, 22, DATE_SUB(NOW(), INTERVAL 3 DAY)), (19, 29, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(20, 20, DATE_SUB(NOW(), INTERVAL 3 DAY)), (20, 23, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(21, 23, DATE_SUB(NOW(), INTERVAL 5 DAY)), (21, 25, DATE_SUB(NOW(), INTERVAL 2 DAY)),
(22, 24, DATE_SUB(NOW(), INTERVAL 4 DAY)), (22, 34, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(23, 25, DATE_SUB(NOW(), INTERVAL 3 DAY)), (23, 21, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(24, 23, DATE_SUB(NOW(), INTERVAL 3 DAY)), (24, 33, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(25, 26, DATE_SUB(NOW(), INTERVAL 5 DAY)), (25, 28, DATE_SUB(NOW(), INTERVAL 2 DAY)),
(26, 27, DATE_SUB(NOW(), INTERVAL 4 DAY)), (26, 30, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(27, 28, DATE_SUB(NOW(), INTERVAL 3 DAY)), (27, 29, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(28, 26, DATE_SUB(NOW(), INTERVAL 3 DAY)), (28, 27, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(29, 29, DATE_SUB(NOW(), INTERVAL 4 DAY)), (29, 30, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(30, 30, DATE_SUB(NOW(), INTERVAL 3 DAY)), (30, 22, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(31, 31, DATE_SUB(NOW(), INTERVAL 4 DAY)), (31, 32, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(32, 32, DATE_SUB(NOW(), INTERVAL 3 DAY)), (32, 33, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(33, 33, DATE_SUB(NOW(), INTERVAL 4 DAY)), (33, 34, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(34, 34, DATE_SUB(NOW(), INTERVAL 3 DAY)), (34, 29, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(35, 35, DATE_SUB(NOW(), INTERVAL 4 DAY)), (35, 15, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(36, 35, DATE_SUB(NOW(), INTERVAL 3 DAY)), (36, 20, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(37, 15, DATE_SUB(NOW(), INTERVAL 3 DAY)), (37, 36, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(38, 14, DATE_SUB(NOW(), INTERVAL 3 DAY)), (38, 16, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(39, 36, DATE_SUB(NOW(), INTERVAL 3 DAY)), (39, 27, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(40, 36, DATE_SUB(NOW(), INTERVAL 3 DAY)), (40, 18, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(41, 7, DATE_SUB(NOW(), INTERVAL 3 DAY)), (41, 23, DATE_SUB(NOW(), INTERVAL 1 DAY)),
(42, 20, DATE_SUB(NOW(), INTERVAL 3 DAY)), (42, 31, DATE_SUB(NOW(), INTERVAL 1 DAY));
-- A few forum posts make the community page look alive.
INSERT INTO forum (id, addtime, title, content, parentid, userid, username, avatarurl, isdone, istop, toptime, typename, cover, isanon, delflag) VALUES
(1001, DATE_SUB(NOW(), INTERVAL 6 DAY), 'Spring Boot 学习路线怎么安排?', '我已经学完 Java 基础,想请教后端项目实战应该先看哪些内容。', 0, 3, 'student_alice', NULL, NULL, 0, NULL, '课程讨论', NULL, 0, 0),
(1002, DATE_SUB(NOW(), INTERVAL 5 DAY), '前端项目里 TypeScript 值得早学吗?', '最近在做 Vue 项目,感觉类型提示很有帮助,想听听大家的经验。', 0, 4, 'student_bob', NULL, NULL, 0, NULL, '学习交流', NULL, 0, 0),
(1003, DATE_SUB(NOW(), INTERVAL 4 DAY), '算法题总是没思路怎么办', '树和图相关题目比较薄弱,大家有什么练习方法可以推荐吗?', 0, 5, 'student_carol', NULL, NULL, 0, NULL, '学习交流', NULL, 0, 0),
(1004, DATE_SUB(NOW(), INTERVAL 3 DAY), 'MySQL 索引什么时候会失效?', '看执行计划时有些查询没有走索引,想整理一下常见原因。', 0, 9, 'student_grace', NULL, NULL, 0, NULL, '课程讨论', NULL, 0, 0),
(1005, DATE_SUB(NOW(), INTERVAL 2 DAY), '非计算机课程也能推荐吗?', '我最近在看项目管理和商务英语,希望首页推荐可以更丰富一些。', 0, 10, 'student_henry', NULL, NULL, 0, NULL, '学习交流', NULL, 0, 0),
(1006, DATE_SUB(NOW(), INTERVAL 1 DAY), '医学健康课程适合零基础吗?', '营养学和急救技能看起来很实用,想知道学习顺序怎么安排。', 0, 8, 'student_frank', NULL, NULL, 0, NULL, '课程讨论', NULL, 0, 0)
ON DUPLICATE KEY UPDATE
addtime = VALUES(addtime),
title = VALUES(title),
content = VALUES(content),
typename = VALUES(typename),
delflag = VALUES(delflag);
-- Extra notices for the student home page.
INSERT INTO notice (id, title, content, create_time) VALUES
(1001, '本周学习建议', '建议同学们优先完成一门进行中的课程,再根据推荐列表选择下一门课程。', DATE_SUB(NOW(), INTERVAL 4 DAY)),
(1002, '跨专业课程库已扩展', '平台新增金融、管理、设计、医学、法律、人文、制造和农业环境等方向课程。', DATE_SUB(NOW(), INTERVAL 2 DAY)),
(1003, '学习数据看板已更新', '趋势图、课程对比和分类掌握度现在可以展示更丰富的学习轨迹。', DATE_SUB(NOW(), INTERVAL 1 DAY))
ON DUPLICATE KEY UPDATE
title = VALUES(title),
content = VALUES(content),
create_time = VALUES(create_time);
SET FOREIGN_KEY_CHECKS = 1;
-- Visible import checks.
SELECT 'users' AS metric, COUNT(*) AS total FROM `user`
UNION ALL
SELECT 'categories', COUNT(*) FROM category
UNION ALL
SELECT 'courses', COUNT(*) FROM course
UNION ALL
SELECT 'learning_records', COUNT(*) FROM learning_record
UNION ALL
SELECT 'favorites', COUNT(*) FROM favorite
UNION ALL
SELECT 'forum_posts', COUNT(*) FROM forum
UNION ALL
SELECT 'notices', COUNT(*) FROM notice;
SELECT category, COUNT(*) AS course_count
FROM course
GROUP BY category
ORDER BY course_count DESC, category;
SELECT username, nickname, '123456' AS password_hint
FROM `user`
WHERE id BETWEEN 3 AND 42
ORDER BY id;