|
|
@@ -0,0 +1,56 @@
|
|
|
+const { PrismaClient } = require('@prisma/client');
|
|
|
+const prisma = new PrismaClient();
|
|
|
+
|
|
|
+async function checkDatabase() {
|
|
|
+ try {
|
|
|
+ console.log('📊 查询 bookId=1 的所有章节记录...\n');
|
|
|
+
|
|
|
+ const chapters = await prisma.bookChapter.findMany({
|
|
|
+ where: { bookId: 1 },
|
|
|
+ orderBy: [
|
|
|
+ { level: 'asc' },
|
|
|
+ { number: 'asc' }
|
|
|
+ ]
|
|
|
+ });
|
|
|
+
|
|
|
+ console.log(`总记录数: ${chapters.length}\n`);
|
|
|
+
|
|
|
+ // 按级别统计
|
|
|
+ const level1 = chapters.filter(c => c.level === 1);
|
|
|
+ const level2 = chapters.filter(c => c.level === 2);
|
|
|
+ const level3 = chapters.filter(c => c.level === 3);
|
|
|
+
|
|
|
+ console.log(`章 (level=1): ${level1.length} 条`);
|
|
|
+ console.log(`节 (level=2): ${level2.length} 条`);
|
|
|
+ console.log(`小节 (level=3): ${level3.length} 条\n`);
|
|
|
+
|
|
|
+ // 显示前5条记录
|
|
|
+ console.log('前5条记录:');
|
|
|
+ chapters.slice(0, 5).forEach(c => {
|
|
|
+ console.log(` ID=${c.id}, level=${c.level}, number=${c.number}, parentId=${c.parentId}, title=${c.title}`);
|
|
|
+ });
|
|
|
+
|
|
|
+ // 检查是否有重复
|
|
|
+ console.log('\n检查重复 (bookId, parentId, level, number):');
|
|
|
+ const keyMap = new Map();
|
|
|
+ chapters.forEach(c => {
|
|
|
+ const key = `${c.bookId}_${c.parentId}_${c.level}_${c.number}`;
|
|
|
+ if (keyMap.has(key)) {
|
|
|
+ console.log(` ⚠️ 重复: ${key}`);
|
|
|
+ console.log(` 记录1: ID=${keyMap.get(key)}, title=${chapters.find(x => x.id === keyMap.get(key))?.title}`);
|
|
|
+ console.log(` 记录2: ID=${c.id}, title=${c.title}`);
|
|
|
+ } else {
|
|
|
+ keyMap.set(key, c.id);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ console.log('\n✅ 检查完成');
|
|
|
+
|
|
|
+ } catch (error) {
|
|
|
+ console.error('错误:', error);
|
|
|
+ } finally {
|
|
|
+ await prisma.$disconnect();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+checkDatabase();
|