zhibo/setup_fan_group_data.sql
2026-01-05 16:58:39 +08:00

201 lines
8.2 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ============================================
-- 粉丝团测试数据设置脚本
-- 基于真实用户创建粉丝团测试数据
-- ============================================
-- ==================== 第一部分:创建表(如果不存在)====================
-- 1. 创建粉丝团表
CREATE TABLE IF NOT EXISTS eb_fan_group (
id INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '粉丝团ID',
anchor_id INT UNSIGNED NOT NULL COMMENT '主播ID',
anchor_name VARCHAR(100) DEFAULT NULL COMMENT '主播名称',
group_id BIGINT UNSIGNED DEFAULT NULL COMMENT '关联群组ID',
name VARCHAR(100) NOT NULL COMMENT '粉丝团名称',
badge VARCHAR(50) DEFAULT '粉丝' COMMENT '粉丝徽章',
badge_color VARCHAR(20) DEFAULT '#FF6B9D' COMMENT '徽章颜色',
member_count INT DEFAULT 0 COMMENT '成员数量',
status TINYINT DEFAULT 1 COMMENT '状态 1-正常 0-禁用',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (id),
KEY idx_anchor_id (anchor_id),
KEY idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='粉丝团表';
-- 2. 创建粉丝团成员表
CREATE TABLE IF NOT EXISTS eb_fan_group_member (
id INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '成员ID',
group_id INT UNSIGNED NOT NULL COMMENT '粉丝团ID',
uid INT UNSIGNED NOT NULL COMMENT '用户ID',
nickname VARCHAR(100) DEFAULT NULL COMMENT '用户昵称',
level INT DEFAULT 1 COMMENT '粉丝等级 1-10',
intimacy INT DEFAULT 0 COMMENT '亲密度',
status TINYINT DEFAULT 1 COMMENT '状态 1-正常 0-退出',
join_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '加入时间',
PRIMARY KEY (id),
UNIQUE KEY uk_group_uid (group_id, uid),
KEY idx_uid (uid),
KEY idx_level (level)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='粉丝团成员表';
-- 3. 创建群组消息表
CREATE TABLE IF NOT EXISTS eb_group_message (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '消息ID',
group_id INT UNSIGNED NOT NULL COMMENT '粉丝团ID',
sender_id INT UNSIGNED NOT NULL COMMENT '发送者ID',
content TEXT COMMENT '消息内容',
message_type VARCHAR(20) DEFAULT 'text' COMMENT '消息类型 text/image/gift',
is_deleted TINYINT DEFAULT 0 COMMENT '是否删除',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (id),
KEY idx_group_id (group_id),
KEY idx_sender_id (sender_id),
KEY idx_create_time (create_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='群组消息表';
-- ==================== 第二部分:查看可用用户 ====================
SELECT '=== 可用用户列表前20个===' as info;
SELECT uid, nickname, avatar, phone FROM eb_user WHERE status = 1 LIMIT 20;
-- ==================== 第三部分:创建粉丝团(如果不存在)====================
-- 为用户100创建粉丝团如果不存在
INSERT INTO eb_fan_group (anchor_id, anchor_name, name, badge, badge_color, member_count, status, create_time)
SELECT 100, u.nickname, CONCAT(u.nickname, '的粉丝团'), '星光', '#FF6B9D', 0, 1, NOW()
FROM eb_user u
WHERE u.uid = 100 AND u.status = 1
AND NOT EXISTS (SELECT 1 FROM eb_fan_group WHERE anchor_id = 100);
-- 为用户101创建粉丝团如果不存在
INSERT INTO eb_fan_group (anchor_id, anchor_name, name, badge, badge_color, member_count, status, create_time)
SELECT 101, u.nickname, CONCAT(u.nickname, '的粉丝团'), '梦想', '#6B9DFF', 0, 1, NOW()
FROM eb_user u
WHERE u.uid = 101 AND u.status = 1
AND NOT EXISTS (SELECT 1 FROM eb_fan_group WHERE anchor_id = 101);
-- 为用户102创建粉丝团如果不存在
INSERT INTO eb_fan_group (anchor_id, anchor_name, name, badge, badge_color, member_count, status, create_time)
SELECT 102, u.nickname, CONCAT(u.nickname, '的粉丝团'), '快乐', '#9DFF6B', 0, 1, NOW()
FROM eb_user u
WHERE u.uid = 102 AND u.status = 1
AND NOT EXISTS (SELECT 1 FROM eb_fan_group WHERE anchor_id = 102);
-- ==================== 第四部分:添加粉丝团成员 ====================
-- 获取粉丝团ID
SET @fg1 = (SELECT id FROM eb_fan_group WHERE anchor_id = 100 LIMIT 1);
SET @fg2 = (SELECT id FROM eb_fan_group WHERE anchor_id = 101 LIMIT 1);
SET @fg3 = (SELECT id FROM eb_fan_group WHERE anchor_id = 102 LIMIT 1);
-- 为粉丝团1添加成员从真实用户中选取
INSERT IGNORE INTO eb_fan_group_member (group_id, uid, nickname, level, intimacy, status, join_time)
SELECT @fg1, u.uid, u.nickname,
FLOOR(1 + RAND() * 5) as level,
FLOOR(100 + RAND() * 5000) as intimacy,
1, DATE_SUB(NOW(), INTERVAL FLOOR(RAND() * 30) DAY)
FROM eb_user u
WHERE u.uid NOT IN (100, 101, 102)
AND u.status = 1
AND u.nickname IS NOT NULL
AND u.nickname != ''
AND @fg1 IS NOT NULL
ORDER BY RAND()
LIMIT 5;
-- 为粉丝团2添加成员
INSERT IGNORE INTO eb_fan_group_member (group_id, uid, nickname, level, intimacy, status, join_time)
SELECT @fg2, u.uid, u.nickname,
FLOOR(1 + RAND() * 5) as level,
FLOOR(100 + RAND() * 5000) as intimacy,
1, DATE_SUB(NOW(), INTERVAL FLOOR(RAND() * 30) DAY)
FROM eb_user u
WHERE u.uid NOT IN (100, 101, 102)
AND u.status = 1
AND u.nickname IS NOT NULL
AND u.nickname != ''
AND u.uid NOT IN (SELECT uid FROM eb_fan_group_member WHERE group_id = @fg1)
AND @fg2 IS NOT NULL
ORDER BY RAND()
LIMIT 4;
-- 为粉丝团3添加成员
INSERT IGNORE INTO eb_fan_group_member (group_id, uid, nickname, level, intimacy, status, join_time)
SELECT @fg3, u.uid, u.nickname,
FLOOR(1 + RAND() * 5) as level,
FLOOR(100 + RAND() * 5000) as intimacy,
1, DATE_SUB(NOW(), INTERVAL FLOOR(RAND() * 30) DAY)
FROM eb_user u
WHERE u.uid NOT IN (100, 101, 102)
AND u.status = 1
AND u.nickname IS NOT NULL
AND u.nickname != ''
AND u.uid NOT IN (SELECT uid FROM eb_fan_group_member WHERE group_id IN (@fg1, @fg2))
AND @fg3 IS NOT NULL
ORDER BY RAND()
LIMIT 3;
-- ==================== 第五部分:添加聊天消息 ====================
-- 为粉丝团1添加消息
INSERT INTO eb_group_message (group_id, sender_id, content, message_type, create_time)
SELECT @fg1, m.uid,
CASE FLOOR(RAND() * 5)
WHEN 0 THEN '大家好,我是新来的粉丝!'
WHEN 1 THEN '今天的直播太精彩了!'
WHEN 2 THEN '支持主播!'
WHEN 3 THEN '期待下次直播~'
ELSE '主播加油!'
END,
'text',
DATE_SUB(NOW(), INTERVAL FLOOR(RAND() * 7) DAY)
FROM eb_fan_group_member m
WHERE m.group_id = @fg1 AND m.status = 1 AND @fg1 IS NOT NULL
LIMIT 5;
-- 为粉丝团2添加消息
INSERT INTO eb_group_message (group_id, sender_id, content, message_type, create_time)
SELECT @fg2, m.uid,
CASE FLOOR(RAND() * 5)
WHEN 0 THEN '欢迎新成员!'
WHEN 1 THEN '直播间见!'
WHEN 2 THEN '主播唱歌真好听'
WHEN 3 THEN '什么时候开播?'
ELSE '粉丝团万岁!'
END,
'text',
DATE_SUB(NOW(), INTERVAL FLOOR(RAND() * 7) DAY)
FROM eb_fan_group_member m
WHERE m.group_id = @fg2 AND m.status = 1 AND @fg2 IS NOT NULL
LIMIT 4;
-- ==================== 第六部分:更新成员数量 ====================
UPDATE eb_fan_group fg SET member_count = (
SELECT COUNT(*) FROM eb_fan_group_member m WHERE m.group_id = fg.id AND m.status = 1
);
-- ==================== 第七部分:验证数据 ====================
SELECT '=== 粉丝团列表 ===' as info;
SELECT id, name, anchor_id, anchor_name, badge, badge_color, member_count, status, create_time
FROM eb_fan_group ORDER BY id;
SELECT '=== 粉丝团成员 ===' as info;
SELECT m.id, m.group_id, fg.name as fan_group_name, m.uid, m.nickname, m.level, m.intimacy, m.join_time
FROM eb_fan_group_member m
LEFT JOIN eb_fan_group fg ON m.group_id = fg.id
WHERE m.status = 1
ORDER BY m.group_id, m.level DESC;
SELECT '=== 聊天消息 ===' as info;
SELECT gm.id, gm.group_id, fg.name as fan_group_name, gm.sender_id, u.nickname as sender_name, gm.content, gm.create_time
FROM eb_group_message gm
LEFT JOIN eb_fan_group fg ON gm.group_id = fg.id
LEFT JOIN eb_user u ON gm.sender_id = u.uid
WHERE gm.is_deleted = 0
ORDER BY gm.group_id, gm.create_time DESC
LIMIT 20;
SELECT '=== 数据设置完成 ===' as info;