zhibo/setup_fan_group_data.sql

201 lines
8.2 KiB
MySQL
Raw Normal View History

2026-01-05 16:58:39 +08:00
-- ============================================
-- 粉丝团测试数据设置脚本
-- 基于真实用户创建粉丝团测试数据
-- ============================================
-- ==================== 第一部分:创建表(如果不存在)====================
-- 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;