93 lines
3.3 KiB
SQL
93 lines
3.3 KiB
SQL
-- 修复粉丝团群聊:为没有关联群组的粉丝团自动创建群组
|
||
|
||
-- 1. 查看当前粉丝团状态
|
||
SELECT id, anchor_id, anchor_name, name, group_id, member_count FROM eb_fan_group;
|
||
|
||
-- 2. 为所有没有group_id的粉丝团创建群组并关联
|
||
-- 这是一个存储过程,用于批量修复
|
||
|
||
DELIMITER //
|
||
|
||
DROP PROCEDURE IF EXISTS fix_fan_group_chat //
|
||
|
||
CREATE PROCEDURE fix_fan_group_chat()
|
||
BEGIN
|
||
DECLARE done INT DEFAULT FALSE;
|
||
DECLARE v_fan_group_id INT;
|
||
DECLARE v_anchor_id INT;
|
||
DECLARE v_anchor_name VARCHAR(64);
|
||
DECLARE v_name VARCHAR(64);
|
||
DECLARE v_member_count INT;
|
||
DECLARE v_new_group_id BIGINT;
|
||
|
||
-- 游标:查找所有没有group_id的粉丝团
|
||
DECLARE cur CURSOR FOR
|
||
SELECT id, anchor_id, anchor_name, name, member_count
|
||
FROM eb_fan_group
|
||
WHERE (group_id IS NULL OR group_id = 0) AND status = 1;
|
||
|
||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
|
||
|
||
OPEN cur;
|
||
|
||
read_loop: LOOP
|
||
FETCH cur INTO v_fan_group_id, v_anchor_id, v_anchor_name, v_name, v_member_count;
|
||
IF done THEN
|
||
LEAVE read_loop;
|
||
END IF;
|
||
|
||
-- 1. 创建群组
|
||
INSERT INTO eb_group (group_name, owner_id, avatar, description, member_count, ext_field1, create_time, update_time)
|
||
VALUES (v_name, v_anchor_id, '', CONCAT(v_anchor_name, '的粉丝团群聊'), v_member_count + 1, 'fan_group', NOW(), NOW());
|
||
|
||
SET v_new_group_id = LAST_INSERT_ID();
|
||
|
||
-- 2. 更新粉丝团的group_id
|
||
UPDATE eb_fan_group SET group_id = v_new_group_id WHERE id = v_fan_group_id;
|
||
|
||
-- 3. 将主播加入群组成员(如果不存在)
|
||
-- role: 0-普通成员 1-管理员 2-群主
|
||
INSERT IGNORE INTO eb_group_member (group_id, user_id, nickname, role, join_time)
|
||
VALUES (v_new_group_id, v_anchor_id, v_anchor_name, 2, NOW());
|
||
|
||
-- 4. 将粉丝团现有成员也加入群组
|
||
INSERT IGNORE INTO eb_group_member (group_id, user_id, nickname, role, join_time)
|
||
SELECT v_new_group_id, uid, nickname, 0, join_time
|
||
FROM eb_fan_group_member
|
||
WHERE group_id = v_fan_group_id AND status = 1;
|
||
|
||
END LOOP;
|
||
|
||
CLOSE cur;
|
||
END //
|
||
|
||
DELIMITER ;
|
||
|
||
-- 执行修复
|
||
CALL fix_fan_group_chat();
|
||
|
||
-- 删除存储过程
|
||
DROP PROCEDURE IF EXISTS fix_fan_group_chat;
|
||
|
||
-- 验证结果
|
||
SELECT fg.id, fg.name, fg.group_id, g.id as group_table_id, g.group_name, g.member_count
|
||
FROM eb_fan_group fg
|
||
LEFT JOIN eb_group g ON fg.group_id = g.id;
|
||
|
||
-- 简化版本(如果不想用存储过程,可以手动执行以下SQL):
|
||
-- 针对粉丝团 id=4
|
||
|
||
-- 步骤1: 创建群组
|
||
-- INSERT INTO eb_group (group_name, owner_id, avatar, description, member_count, ext_field1, create_time, update_time)
|
||
-- SELECT name, anchor_id, '', CONCAT(anchor_name, '的粉丝团群聊'), member_count + 1, 'fan_group', NOW(), NOW()
|
||
-- FROM eb_fan_group WHERE id = 4;
|
||
|
||
-- 步骤2: 更新粉丝团的group_id
|
||
-- UPDATE eb_fan_group SET group_id = LAST_INSERT_ID() WHERE id = 4;
|
||
|
||
-- 步骤3: 将主播加入群组
|
||
-- role: 0-普通成员 1-管理员 2-群主
|
||
-- INSERT INTO eb_group_member (group_id, user_id, nickname, role, join_time)
|
||
-- SELECT fg.group_id, fg.anchor_id, fg.anchor_name, 2, NOW()
|
||
-- FROM eb_fan_group fg WHERE fg.id = 4;
|