93 lines
2.6 KiB
JavaScript
93 lines
2.6 KiB
JavaScript
const mysql = require('mysql2/promise');
|
|
|
|
// 資料庫連接配置
|
|
const dbConfig = {
|
|
host: 'mysql.theaken.com',
|
|
port: 33306,
|
|
user: 'AI_Platform',
|
|
password: 'Aa123456',
|
|
database: 'db_AI_Platform',
|
|
charset: 'utf8mb4'
|
|
};
|
|
|
|
async function fixFavoritesDuplicates() {
|
|
let connection;
|
|
|
|
try {
|
|
console.log('連接到資料庫...');
|
|
connection = await mysql.createConnection(dbConfig);
|
|
|
|
console.log('檢查重複的收藏記錄...');
|
|
|
|
// 查找重複記錄
|
|
const [duplicates] = await connection.execute(`
|
|
SELECT user_id, app_id, COUNT(*) as count
|
|
FROM user_favorites
|
|
GROUP BY user_id, app_id
|
|
HAVING COUNT(*) > 1
|
|
`);
|
|
|
|
if (duplicates.length === 0) {
|
|
console.log('沒有發現重複的收藏記錄');
|
|
return;
|
|
}
|
|
|
|
console.log(`發現 ${duplicates.length} 組重複記錄:`);
|
|
|
|
for (const duplicate of duplicates) {
|
|
console.log(`用戶 ${duplicate.user_id} 對應用 ${duplicate.app_id} 有 ${duplicate.count} 條記錄`);
|
|
|
|
// 保留最早的記錄,刪除其他重複記錄
|
|
const [records] = await connection.execute(`
|
|
SELECT id, created_at
|
|
FROM user_favorites
|
|
WHERE user_id = ? AND app_id = ?
|
|
ORDER BY created_at ASC
|
|
`, [duplicate.user_id, duplicate.app_id]);
|
|
|
|
if (records.length > 1) {
|
|
// 保留第一條記錄,刪除其他記錄
|
|
const keepRecord = records[0];
|
|
const deleteIds = records.slice(1).map(r => r.id);
|
|
|
|
console.log(`保留記錄 ID: ${keepRecord.id} (創建時間: ${keepRecord.created_at})`);
|
|
console.log(`刪除記錄 IDs: ${deleteIds.join(', ')}`);
|
|
|
|
await connection.execute(`
|
|
DELETE FROM user_favorites
|
|
WHERE id IN (${deleteIds.map(() => '?').join(',')})
|
|
`, deleteIds);
|
|
|
|
console.log(`已清理 ${deleteIds.length} 條重複記錄`);
|
|
}
|
|
}
|
|
|
|
console.log('重複記錄清理完成!');
|
|
|
|
// 驗證修復結果
|
|
const [remainingDuplicates] = await connection.execute(`
|
|
SELECT user_id, app_id, COUNT(*) as count
|
|
FROM user_favorites
|
|
GROUP BY user_id, app_id
|
|
HAVING COUNT(*) > 1
|
|
`);
|
|
|
|
if (remainingDuplicates.length === 0) {
|
|
console.log('✅ 所有重複記錄已成功清理');
|
|
} else {
|
|
console.log('❌ 仍有重複記錄存在:', remainingDuplicates);
|
|
}
|
|
|
|
} catch (error) {
|
|
console.error('修復過程中發生錯誤:', error);
|
|
} finally {
|
|
if (connection) {
|
|
await connection.end();
|
|
console.log('資料庫連接已關閉');
|
|
}
|
|
}
|
|
}
|
|
|
|
// 執行修復
|
|
fixFavoritesDuplicates().catch(console.error);
|