實作前台 APP 呈現、APP 詳細頁面
This commit is contained in:
@@ -1,73 +0,0 @@
|
||||
const mysql = require('mysql2/promise');
|
||||
|
||||
// 資料庫配置
|
||||
const dbConfig = {
|
||||
host: process.env.DB_HOST || 'mysql.theaken.com',
|
||||
port: parseInt(process.env.DB_PORT || '33306'),
|
||||
user: process.env.DB_USER || 'AI_Platform',
|
||||
password: process.env.DB_PASSWORD || 'Aa123456',
|
||||
database: process.env.DB_NAME || 'db_AI_Platform',
|
||||
charset: 'utf8mb4',
|
||||
timezone: '+08:00'
|
||||
};
|
||||
|
||||
async function addUserFields() {
|
||||
console.log('🚀 開始為 users 表添加缺失的字段...');
|
||||
|
||||
try {
|
||||
const connection = await mysql.createConnection(dbConfig);
|
||||
console.log('✅ 資料庫連接成功');
|
||||
|
||||
// 檢查字段是否已存在
|
||||
const [columns] = await connection.execute(`
|
||||
SELECT COLUMN_NAME
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = ? AND TABLE_NAME = 'users' AND COLUMN_NAME IN ('phone', 'location', 'bio')
|
||||
`, [dbConfig.database]);
|
||||
|
||||
const existingColumns = columns.map(col => col.COLUMN_NAME);
|
||||
console.log('現有字段:', existingColumns);
|
||||
|
||||
// 添加缺失的字段
|
||||
const fieldsToAdd = [
|
||||
{ name: 'phone', sql: 'ADD COLUMN `phone` VARCHAR(20) NULL' },
|
||||
{ name: 'location', sql: 'ADD COLUMN `location` VARCHAR(100) NULL' },
|
||||
{ name: 'bio', sql: 'ADD COLUMN `bio` TEXT NULL' }
|
||||
];
|
||||
|
||||
for (const field of fieldsToAdd) {
|
||||
if (!existingColumns.includes(field.name)) {
|
||||
try {
|
||||
await connection.execute(`ALTER TABLE users ${field.sql}`);
|
||||
console.log(`✅ 添加字段: ${field.name}`);
|
||||
} catch (error) {
|
||||
console.log(`❌ 添加字段 ${field.name} 失敗:`, error.message);
|
||||
}
|
||||
} else {
|
||||
console.log(`⚠️ 字段 ${field.name} 已存在,跳過`);
|
||||
}
|
||||
}
|
||||
|
||||
// 驗證字段添加結果
|
||||
const [finalColumns] = await connection.execute(`
|
||||
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = ? AND TABLE_NAME = 'users'
|
||||
AND COLUMN_NAME IN ('phone', 'location', 'bio')
|
||||
ORDER BY ORDINAL_POSITION
|
||||
`, [dbConfig.database]);
|
||||
|
||||
console.log('\n📋 最終字段狀態:');
|
||||
finalColumns.forEach(col => {
|
||||
console.log(`- ${col.COLUMN_NAME}: ${col.DATA_TYPE} (${col.IS_NULLABLE === 'YES' ? '可為空' : '不可為空'})`);
|
||||
});
|
||||
|
||||
await connection.end();
|
||||
console.log('\n🎉 字段添加完成!');
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ 添加字段時發生錯誤:', error);
|
||||
}
|
||||
}
|
||||
|
||||
addUserFields();
|
@@ -1,84 +0,0 @@
|
||||
async function debugLoadingIssue() {
|
||||
console.log('🔍 調試管理員後台載入問題...\n');
|
||||
|
||||
try {
|
||||
// 1. 檢查管理員頁面載入
|
||||
console.log('1. 檢查管理員頁面載入...');
|
||||
const response = await fetch('http://localhost:3000/admin');
|
||||
|
||||
if (response.ok) {
|
||||
const pageContent = await response.text();
|
||||
console.log('✅ 管理員頁面載入成功');
|
||||
console.log('狀態碼:', response.status);
|
||||
|
||||
// 檢查頁面內容
|
||||
if (pageContent.includes('載入中...')) {
|
||||
console.log('❌ 頁面一直顯示載入中狀態');
|
||||
|
||||
// 檢查是否有調試信息
|
||||
if (pageContent.includes('調試信息')) {
|
||||
console.log('📋 發現調試信息');
|
||||
const debugMatch = pageContent.match(/調試信息: 用戶=([^,]+), 角色=([^<]+)/);
|
||||
if (debugMatch) {
|
||||
console.log('調試信息:', {
|
||||
用戶: debugMatch[1],
|
||||
角色: debugMatch[2]
|
||||
});
|
||||
}
|
||||
} else {
|
||||
console.log('⚠️ 沒有調試信息,可能是載入狀態問題');
|
||||
}
|
||||
|
||||
// 檢查頁面是否包含管理員內容
|
||||
if (pageContent.includes('儀表板') || pageContent.includes('管理員')) {
|
||||
console.log('✅ 頁面包含管理員內容,但被載入狀態覆蓋');
|
||||
} else {
|
||||
console.log('❌ 頁面不包含管理員內容');
|
||||
}
|
||||
|
||||
} else if (pageContent.includes('存取被拒')) {
|
||||
console.log('❌ 頁面顯示存取被拒');
|
||||
} else if (pageContent.includes('儀表板') || pageContent.includes('管理員')) {
|
||||
console.log('✅ 管理員頁面正常顯示');
|
||||
} else {
|
||||
console.log('⚠️ 頁面內容不確定');
|
||||
}
|
||||
|
||||
} else {
|
||||
console.log('❌ 管理員頁面載入失敗:', response.status);
|
||||
}
|
||||
|
||||
// 2. 檢查登入狀態
|
||||
console.log('\n2. 檢查登入狀態...');
|
||||
const loginResponse = await fetch('http://localhost:3000/api/auth/login', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({
|
||||
email: 'admin@ai-platform.com',
|
||||
password: 'admin123456'
|
||||
})
|
||||
});
|
||||
|
||||
if (loginResponse.ok) {
|
||||
const loginData = await loginResponse.json();
|
||||
console.log('✅ 管理員登入 API 正常');
|
||||
console.log('用戶角色:', loginData.user?.role);
|
||||
} else {
|
||||
console.log('❌ 管理員登入 API 失敗:', loginResponse.status);
|
||||
}
|
||||
|
||||
console.log('\n🎉 載入問題調試完成!');
|
||||
console.log('\n💡 可能的原因:');
|
||||
console.log('1. isInitialized 狀態沒有正確設置');
|
||||
console.log('2. 客戶端載入邏輯有問題');
|
||||
console.log('3. localStorage 中的用戶資料有問題');
|
||||
console.log('4. 載入條件邏輯有問題');
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ 調試過程中發生錯誤:', error);
|
||||
}
|
||||
}
|
||||
|
||||
debugLoadingIssue();
|
@@ -1,180 +0,0 @@
|
||||
const mysql = require('mysql2/promise');
|
||||
|
||||
async function insertTestData() {
|
||||
console.log('📊 在資料庫中插入真實測試數據...\n');
|
||||
|
||||
let connection;
|
||||
try {
|
||||
// 連接資料庫
|
||||
connection = await mysql.createConnection({
|
||||
host: 'localhost',
|
||||
user: 'root',
|
||||
password: '123456',
|
||||
database: 'ai_showcase_platform'
|
||||
});
|
||||
|
||||
console.log('✅ 資料庫連接成功');
|
||||
|
||||
// 1. 獲取現有的應用和用戶
|
||||
const [apps] = await connection.execute('SELECT id FROM apps WHERE is_active = TRUE LIMIT 3');
|
||||
const [users] = await connection.execute('SELECT id FROM users WHERE status = "active" LIMIT 10');
|
||||
|
||||
if (apps.length === 0) {
|
||||
console.log('❌ 沒有找到現有應用,無法創建測試數據');
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(`📱 找到 ${apps.length} 個應用`);
|
||||
console.log(`👥 找到 ${users.length} 個用戶`);
|
||||
|
||||
const targetAppId = apps[0].id; // 使用第一個應用作為目標
|
||||
console.log(`🎯 目標應用 ID: ${targetAppId}`);
|
||||
|
||||
// 2. 清空現有的測試數據(如果有的話)
|
||||
console.log('\n🧹 清空現有測試數據...');
|
||||
await connection.execute('DELETE FROM user_views WHERE app_id = ?', [targetAppId]);
|
||||
await connection.execute('DELETE FROM user_likes WHERE app_id = ?', [targetAppId]);
|
||||
await connection.execute('DELETE FROM user_ratings WHERE app_id = ?', [targetAppId]);
|
||||
console.log('✅ 現有測試數據已清空');
|
||||
|
||||
// 3. 插入用戶瀏覽記錄
|
||||
console.log('\n👀 插入用戶瀏覽記錄...');
|
||||
const views = [];
|
||||
for (let i = 0; i < 25; i++) {
|
||||
const userId = users[Math.floor(Math.random() * users.length)].id;
|
||||
const viewedAt = new Date(Date.now() - Math.random() * 30 * 24 * 60 * 60 * 1000); // 過去30天內
|
||||
const ipAddress = `192.168.1.${Math.floor(Math.random() * 255)}`;
|
||||
const userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36';
|
||||
|
||||
views.push([targetAppId, userId, viewedAt, ipAddress, userAgent]);
|
||||
}
|
||||
|
||||
for (const view of views) {
|
||||
await connection.execute(`
|
||||
INSERT INTO user_views (id, app_id, user_id, viewed_at, ip_address, user_agent)
|
||||
VALUES (UUID(), ?, ?, ?, ?, ?)
|
||||
`, view);
|
||||
}
|
||||
|
||||
console.log(`✅ 插入了 ${views.length} 個瀏覽記錄`);
|
||||
|
||||
// 4. 插入用戶按讚記錄
|
||||
console.log('\n❤️ 插入用戶按讚記錄...');
|
||||
const likes = [];
|
||||
for (let i = 0; i < 8; i++) {
|
||||
const userId = users[Math.floor(Math.random() * users.length)].id;
|
||||
const likedAt = new Date(Date.now() - Math.random() * 30 * 24 * 60 * 60 * 1000);
|
||||
|
||||
likes.push([targetAppId, userId, likedAt]);
|
||||
}
|
||||
|
||||
for (const like of likes) {
|
||||
await connection.execute(`
|
||||
INSERT INTO user_likes (id, app_id, user_id, liked_at)
|
||||
VALUES (UUID(), ?, ?, ?)
|
||||
`, like);
|
||||
}
|
||||
|
||||
console.log(`✅ 插入了 ${likes.length} 個按讚記錄`);
|
||||
|
||||
// 5. 插入用戶評分記錄
|
||||
console.log('\n⭐ 插入用戶評分記錄...');
|
||||
const ratings = [
|
||||
{ rating: 5, review: '這個應用非常實用,界面設計得很棒!' },
|
||||
{ rating: 4, review: '功能強大,處理速度很快,推薦使用。' },
|
||||
{ rating: 5, review: '非常好用的工具,節省了很多時間。' },
|
||||
{ rating: 3, review: '還不錯,但還有改進空間。' },
|
||||
{ rating: 4, review: '界面簡潔,操作簡單,很滿意。' },
|
||||
{ rating: 5, review: '功能齊全,使用體驗很好。' },
|
||||
{ rating: 4, review: '整體不錯,希望能增加更多功能。' },
|
||||
{ rating: 5, review: '非常推薦,已經推薦給同事了。' },
|
||||
{ rating: 3, review: '還可以,但界面可以再優化。' },
|
||||
{ rating: 4, review: '實用性很高,值得使用。' }
|
||||
];
|
||||
|
||||
for (let i = 0; i < ratings.length; i++) {
|
||||
const userId = users[Math.floor(Math.random() * users.length)].id;
|
||||
const ratedAt = new Date(Date.now() - Math.random() * 30 * 24 * 60 * 60 * 1000);
|
||||
|
||||
await connection.execute(`
|
||||
INSERT INTO user_ratings (id, app_id, user_id, rating, rated_at)
|
||||
VALUES (UUID(), ?, ?, ?, ?)
|
||||
`, [targetAppId, userId, ratings[i].rating, ratedAt]);
|
||||
}
|
||||
|
||||
console.log(`✅ 插入了 ${ratings.length} 個評分記錄`);
|
||||
|
||||
// 6. 更新應用的統計數據
|
||||
console.log('\n📈 更新應用統計數據...');
|
||||
const [viewCount] = await connection.execute(
|
||||
'SELECT COUNT(*) as count FROM user_views WHERE app_id = ?',
|
||||
[targetAppId]
|
||||
);
|
||||
const [likeCount] = await connection.execute(
|
||||
'SELECT COUNT(*) as count FROM user_likes WHERE app_id = ?',
|
||||
[targetAppId]
|
||||
);
|
||||
|
||||
await connection.execute(`
|
||||
UPDATE apps
|
||||
SET views_count = ?, likes_count = ?, updated_at = NOW()
|
||||
WHERE id = ?
|
||||
`, [viewCount[0].count, likeCount[0].count, targetAppId]);
|
||||
|
||||
console.log(` - 應用 ${targetAppId}: ${viewCount[0].count} 瀏覽, ${likeCount[0].count} 讚`);
|
||||
|
||||
// 7. 顯示最終統計
|
||||
console.log('\n📊 數據插入完成!最終統計:');
|
||||
|
||||
const [appStats] = await connection.execute(`
|
||||
SELECT
|
||||
views_count,
|
||||
likes_count
|
||||
FROM apps
|
||||
WHERE id = ?
|
||||
`, [targetAppId]);
|
||||
|
||||
const [ratingStats] = await connection.execute(`
|
||||
SELECT
|
||||
COUNT(*) as total_ratings,
|
||||
AVG(rating) as avg_rating
|
||||
FROM user_ratings
|
||||
WHERE app_id = ?
|
||||
`, [targetAppId]);
|
||||
|
||||
const [viewStats] = await connection.execute(`
|
||||
SELECT COUNT(*) as total_views FROM user_views WHERE app_id = ?
|
||||
`, [targetAppId]);
|
||||
|
||||
const [likeStats] = await connection.execute(`
|
||||
SELECT COUNT(*) as total_likes FROM user_likes WHERE app_id = ?
|
||||
`, [targetAppId]);
|
||||
|
||||
console.log(` - 應用瀏覽數: ${appStats[0].views_count}`);
|
||||
console.log(` - 應用讚數: ${appStats[0].likes_count}`);
|
||||
console.log(` - 總瀏覽數: ${viewStats[0].total_views}`);
|
||||
console.log(` - 總讚數: ${likeStats[0].total_likes}`);
|
||||
console.log(` - 評分總數: ${ratingStats[0].total_ratings}`);
|
||||
console.log(` - 平均評分: ${ratingStats[0].avg_rating.toFixed(1)}`);
|
||||
|
||||
console.log('\n🎉 真實測試數據插入完成!');
|
||||
console.log('\n💡 現在您可以重新載入應用管理頁面查看真實的資料庫數據');
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ 插入測試數據時發生錯誤:', error);
|
||||
if (error.code === 'ECONNREFUSED') {
|
||||
console.log('\n💡 請確保 MySQL 服務正在運行,並且連接參數正確');
|
||||
console.log(' - Host: localhost');
|
||||
console.log(' - User: root');
|
||||
console.log(' - Password: 123456');
|
||||
console.log(' - Database: ai_showcase_platform');
|
||||
}
|
||||
} finally {
|
||||
if (connection) {
|
||||
await connection.end();
|
||||
console.log('\n🔌 資料庫連接已關閉');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
insertTestData();
|
@@ -1,80 +0,0 @@
|
||||
-- 插入真實測試數據到資料庫(多用戶版本)
|
||||
-- 請在 MySQL 中執行此腳本
|
||||
|
||||
-- 1. 檢查是否有足夠的用戶
|
||||
SELECT COUNT(*) as user_count FROM users WHERE status = 'active';
|
||||
|
||||
-- 2. 清空現有的測試數據(如果有的話)
|
||||
DELETE FROM user_views WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7';
|
||||
DELETE FROM user_likes WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7';
|
||||
DELETE FROM user_ratings WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7';
|
||||
|
||||
-- 3. 獲取多個用戶的 ID
|
||||
SET @user1_id = (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 0);
|
||||
SET @user2_id = (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 1);
|
||||
SET @user3_id = (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 2);
|
||||
SET @user4_id = (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 3);
|
||||
SET @user5_id = (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 4);
|
||||
|
||||
-- 4. 插入用戶瀏覽記錄 (25條) - 使用多個用戶
|
||||
INSERT INTO user_views (id, app_id, user_id, viewed_at, ip_address, user_agent) VALUES
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user1_id, '2024-01-20 10:30:00', '192.168.1.100', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user2_id, '2024-01-19 14:20:00', '192.168.1.101', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user3_id, '2024-01-18 09:15:00', '192.168.1.102', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user4_id, '2024-01-17 16:45:00', '192.168.1.103', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user5_id, '2024-01-16 11:30:00', '192.168.1.104', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user1_id, '2024-01-15 08:20:00', '192.168.1.105', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user2_id, '2024-01-14 15:10:00', '192.168.1.106', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user3_id, '2024-01-13 12:45:00', '192.168.1.107', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user4_id, '2024-01-12 17:30:00', '192.168.1.108', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user5_id, '2024-01-11 09:15:00', '192.168.1.109', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user1_id, '2024-01-10 14:25:00', '192.168.1.110', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user2_id, '2024-01-09 11:40:00', '192.168.1.111', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user3_id, '2024-01-08 16:55:00', '192.168.1.112', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user4_id, '2024-01-07 13:20:00', '192.168.1.113', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user5_id, '2024-01-06 10:35:00', '192.168.1.114', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user1_id, '2024-01-05 15:50:00', '192.168.1.115', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user2_id, '2024-01-04 12:15:00', '192.168.1.116', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user3_id, '2024-01-03 09:30:00', '192.168.1.117', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user4_id, '2024-01-02 17:45:00', '192.168.1.118', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user5_id, '2024-01-01 14:20:00', '192.168.1.119', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user1_id, '2023-12-31 11:10:00', '192.168.1.120', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user2_id, '2023-12-30 16:25:00', '192.168.1.121', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user3_id, '2023-12-29 13:40:00', '192.168.1.122', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user4_id, '2023-12-28 10:55:00', '192.168.1.123', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user5_id, '2023-12-27 15:15:00', '192.168.1.124', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)');
|
||||
|
||||
-- 5. 插入用戶按讚記錄 (8條) - 使用多個用戶
|
||||
INSERT INTO user_likes (id, app_id, user_id, liked_at) VALUES
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user1_id, '2024-01-20 10:35:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user2_id, '2024-01-19 14:25:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user3_id, '2024-01-18 09:20:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user4_id, '2024-01-17 16:50:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user5_id, '2024-01-16 11:35:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user1_id, '2024-01-15 08:25:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user2_id, '2024-01-14 15:15:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user3_id, '2024-01-13 12:50:00');
|
||||
|
||||
-- 6. 插入用戶評分記錄 (5條) - 使用不同用戶,避免重複約束
|
||||
INSERT INTO user_ratings (id, app_id, user_id, rating, rated_at) VALUES
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user1_id, 5, '2024-01-20 10:40:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user2_id, 4, '2024-01-19 14:30:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user3_id, 5, '2024-01-18 09:25:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user4_id, 3, '2024-01-17 16:55:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @user5_id, 4, '2024-01-16 11:40:00');
|
||||
|
||||
-- 7. 更新應用的統計數據
|
||||
UPDATE apps
|
||||
SET
|
||||
views_count = (SELECT COUNT(*) FROM user_views WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7'),
|
||||
likes_count = (SELECT COUNT(*) FROM user_likes WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7'),
|
||||
updated_at = NOW()
|
||||
WHERE id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7';
|
||||
|
||||
-- 8. 顯示統計摘要
|
||||
SELECT
|
||||
'統計摘要' as 項目,
|
||||
(SELECT COUNT(*) FROM user_views WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7') as 總瀏覽數,
|
||||
(SELECT COUNT(*) FROM user_likes WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7') as 總讚數,
|
||||
(SELECT COUNT(*) FROM user_ratings WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7') as 總評分數,
|
||||
(SELECT AVG(rating) FROM user_ratings WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7') as 平均評分;
|
@@ -1,72 +0,0 @@
|
||||
-- 插入真實測試數據到資料庫(簡化版本)
|
||||
-- 請在 MySQL 中執行此腳本
|
||||
|
||||
-- 1. 檢查是否有足夠的用戶
|
||||
SELECT COUNT(*) as user_count FROM users WHERE status = 'active';
|
||||
|
||||
-- 2. 清空現有的測試數據(如果有的話)
|
||||
DELETE FROM user_views WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7';
|
||||
DELETE FROM user_likes WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7';
|
||||
DELETE FROM user_ratings WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7';
|
||||
|
||||
-- 3. 獲取第一個用戶的 ID 作為默認用戶
|
||||
SET @default_user_id = (SELECT id FROM users WHERE status = 'active' LIMIT 1);
|
||||
|
||||
-- 4. 插入用戶瀏覽記錄 (25條) - 使用默認用戶
|
||||
INSERT INTO user_views (id, app_id, user_id, viewed_at, ip_address, user_agent) VALUES
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-20 10:30:00', '192.168.1.100', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-19 14:20:00', '192.168.1.101', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-18 09:15:00', '192.168.1.102', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-17 16:45:00', '192.168.1.103', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-16 11:30:00', '192.168.1.104', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-15 08:20:00', '192.168.1.105', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-14 15:10:00', '192.168.1.106', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-13 12:45:00', '192.168.1.107', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-12 17:30:00', '192.168.1.108', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-11 09:15:00', '192.168.1.109', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-10 14:25:00', '192.168.1.110', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-09 11:40:00', '192.168.1.111', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-08 16:55:00', '192.168.1.112', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-07 13:20:00', '192.168.1.113', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-06 10:35:00', '192.168.1.114', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-05 15:50:00', '192.168.1.115', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-04 12:15:00', '192.168.1.116', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-03 09:30:00', '192.168.1.117', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-02 17:45:00', '192.168.1.118', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-01 14:20:00', '192.168.1.119', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2023-12-31 11:10:00', '192.168.1.120', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2023-12-30 16:25:00', '192.168.1.121', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2023-12-29 13:40:00', '192.168.1.122', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2023-12-28 10:55:00', '192.168.1.123', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2023-12-27 15:15:00', '192.168.1.124', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)');
|
||||
|
||||
-- 5. 插入用戶按讚記錄 (8條) - 使用默認用戶
|
||||
INSERT INTO user_likes (id, app_id, user_id, liked_at) VALUES
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-20 10:35:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-19 14:25:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-18 09:20:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-17 16:50:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-16 11:35:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-15 08:25:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-14 15:15:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, '2024-01-13 12:50:00');
|
||||
|
||||
-- 6. 插入用戶評分記錄 (1條) - 使用默認用戶,避免重複約束
|
||||
INSERT INTO user_ratings (id, app_id, user_id, rating, rated_at) VALUES
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', @default_user_id, 5, '2024-01-20 10:40:00');
|
||||
|
||||
-- 7. 更新應用的統計數據
|
||||
UPDATE apps
|
||||
SET
|
||||
views_count = (SELECT COUNT(*) FROM user_views WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7'),
|
||||
likes_count = (SELECT COUNT(*) FROM user_likes WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7'),
|
||||
updated_at = NOW()
|
||||
WHERE id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7';
|
||||
|
||||
-- 8. 顯示統計摘要
|
||||
SELECT
|
||||
'統計摘要' as 項目,
|
||||
(SELECT COUNT(*) FROM user_views WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7') as 總瀏覽數,
|
||||
(SELECT COUNT(*) FROM user_likes WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7') as 總讚數,
|
||||
(SELECT COUNT(*) FROM user_ratings WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7') as 總評分數,
|
||||
(SELECT AVG(rating) FROM user_ratings WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7') as 平均評分;
|
@@ -1,78 +0,0 @@
|
||||
-- 插入真實測試數據到資料庫
|
||||
-- 請在 MySQL 中執行此腳本
|
||||
|
||||
-- 1. 檢查是否有足夠的用戶
|
||||
SELECT COUNT(*) as user_count FROM users WHERE status = 'active';
|
||||
|
||||
-- 2. 清空現有的測試數據(如果有的話)
|
||||
DELETE FROM user_views WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7';
|
||||
DELETE FROM user_likes WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7';
|
||||
DELETE FROM user_ratings WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7';
|
||||
|
||||
-- 2. 插入用戶瀏覽記錄 (25條) - 使用不同的用戶避免重複約束
|
||||
INSERT INTO user_views (id, app_id, user_id, viewed_at, ip_address, user_agent) VALUES
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 0), '2024-01-20 10:30:00', '192.168.1.100', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 1), '2024-01-19 14:20:00', '192.168.1.101', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 2), '2024-01-18 09:15:00', '192.168.1.102', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 3), '2024-01-17 16:45:00', '192.168.1.103', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 4), '2024-01-16 11:30:00', '192.168.1.104', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 5), '2024-01-15 08:20:00', '192.168.1.105', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 6), '2024-01-14 15:10:00', '192.168.1.106', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 7), '2024-01-13 12:45:00', '192.168.1.107', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 8), '2024-01-12 17:30:00', '192.168.1.108', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 9), '2024-01-11 09:15:00', '192.168.1.109', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 0), '2024-01-10 14:25:00', '192.168.1.110', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 1), '2024-01-09 11:40:00', '192.168.1.111', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 2), '2024-01-08 16:55:00', '192.168.1.112', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 3), '2024-01-07 13:20:00', '192.168.1.113', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 4), '2024-01-06 10:35:00', '192.168.1.114', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 5), '2024-01-05 15:50:00', '192.168.1.115', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 6), '2024-01-04 12:15:00', '192.168.1.116', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 7), '2024-01-03 09:30:00', '192.168.1.117', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 8), '2024-01-02 17:45:00', '192.168.1.118', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 9), '2024-01-01 14:20:00', '192.168.1.119', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 0), '2023-12-31 11:10:00', '192.168.1.120', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 1), '2023-12-30 16:25:00', '192.168.1.121', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 2), '2023-12-29 13:40:00', '192.168.1.122', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 3), '2023-12-28 10:55:00', '192.168.1.123', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 4), '2023-12-27 15:15:00', '192.168.1.124', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)');
|
||||
|
||||
-- 3. 插入用戶按讚記錄 (8條) - 使用不同的用戶避免重複約束
|
||||
INSERT INTO user_likes (id, app_id, user_id, liked_at) VALUES
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 0), '2024-01-20 10:35:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 1), '2024-01-19 14:25:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 2), '2024-01-18 09:20:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 3), '2024-01-17 16:50:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 4), '2024-01-16 11:35:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 5), '2024-01-15 08:25:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 6), '2024-01-14 15:15:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 7), '2024-01-13 12:50:00');
|
||||
|
||||
-- 4. 插入用戶評分記錄 (10條) - 使用不同的用戶避免重複約束
|
||||
INSERT INTO user_ratings (id, app_id, user_id, rating, rated_at) VALUES
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 0), 5, '2024-01-20 10:40:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 1), 4, '2024-01-19 14:30:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 2), 5, '2024-01-18 09:25:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 3), 3, '2024-01-17 16:55:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 4), 4, '2024-01-16 11:40:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 5), 5, '2024-01-15 08:30:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 6), 4, '2024-01-14 15:20:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 7), 5, '2024-01-13 12:55:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 8), 4, '2024-01-12 17:35:00'),
|
||||
(UUID(), '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7', (SELECT id FROM users WHERE status = 'active' ORDER BY id LIMIT 1 OFFSET 9), 5, '2024-01-11 09:20:00');
|
||||
|
||||
-- 5. 更新應用的統計數據
|
||||
UPDATE apps
|
||||
SET
|
||||
views_count = (SELECT COUNT(*) FROM user_views WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7'),
|
||||
likes_count = (SELECT COUNT(*) FROM user_likes WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7'),
|
||||
updated_at = NOW()
|
||||
WHERE id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7';
|
||||
|
||||
-- 6. 顯示統計摘要
|
||||
SELECT
|
||||
'統計摘要' as 項目,
|
||||
(SELECT COUNT(*) FROM user_views WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7') as 總瀏覽數,
|
||||
(SELECT COUNT(*) FROM user_likes WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7') as 總讚數,
|
||||
(SELECT COUNT(*) FROM user_ratings WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7') as 總評分數,
|
||||
(SELECT AVG(rating) FROM user_ratings WHERE app_id = '7f7395f4-ad9f-4d14-9e2c-84962ecbcfd7') as 平均評分;
|
Reference in New Issue
Block a user