100 lines
3.4 KiB
SQL
100 lines
3.4 KiB
SQL
-- ========================================
|
||
-- 清理重复菜单SQL脚本
|
||
-- 用途:删除数据库中重复的心理学相关菜单
|
||
-- ========================================
|
||
USE ry_news;
|
||
SET NAMES utf8mb4;
|
||
|
||
-- ========================================
|
||
-- 1. 查找重复的菜单(基于menu_name和path组合)
|
||
-- ========================================
|
||
-- 先查看重复的菜单
|
||
SELECT menu_name, path, component, COUNT(*) as count
|
||
FROM sys_menu
|
||
WHERE menu_name LIKE '%心理%'
|
||
OR menu_name LIKE '%量表%'
|
||
OR menu_name LIKE '%题目%'
|
||
OR menu_name LIKE '%因子%'
|
||
OR menu_name LIKE '%测评%'
|
||
OR menu_name LIKE '%网站%'
|
||
OR menu_name LIKE '%栏目%'
|
||
OR menu_name LIKE '%评论%'
|
||
OR menu_name LIKE '%预警%'
|
||
OR menu_name LIKE '%问卷%'
|
||
OR menu_name LIKE '%档案%'
|
||
GROUP BY menu_name, path, component
|
||
HAVING count > 1;
|
||
|
||
-- ========================================
|
||
-- 2. 删除重复的菜单(保留menu_id最小的那个)
|
||
-- ========================================
|
||
-- 删除"心理测评管理"目录的重复项(保留第一个)
|
||
DELETE t1 FROM sys_menu t1
|
||
INNER JOIN sys_menu t2
|
||
WHERE t1.menu_name = '心理测评管理'
|
||
AND t1.parent_id = 0
|
||
AND t2.menu_name = '心理测评管理'
|
||
AND t2.parent_id = 0
|
||
AND t1.menu_id > t2.menu_id;
|
||
|
||
-- 删除"心理网站管理"目录的重复项
|
||
DELETE t1 FROM sys_menu t1
|
||
INNER JOIN sys_menu t2
|
||
WHERE t1.menu_name = '心理网站管理'
|
||
AND t1.parent_id = 0
|
||
AND t2.menu_name = '心理网站管理'
|
||
AND t2.parent_id = 0
|
||
AND t1.menu_id > t2.menu_id;
|
||
|
||
-- 删除其他重复菜单(基于path和component)
|
||
DELETE t1 FROM sys_menu t1
|
||
INNER JOIN sys_menu t2
|
||
WHERE t1.path = t2.path
|
||
AND t1.component = t2.component
|
||
AND t1.menu_name = t2.menu_name
|
||
AND t1.menu_id > t2.menu_id
|
||
AND (t1.menu_name LIKE '%心理%'
|
||
OR t1.menu_name LIKE '%量表%'
|
||
OR t1.menu_name LIKE '%题目%'
|
||
OR t1.menu_name LIKE '%因子%'
|
||
OR t1.menu_name LIKE '%测评%'
|
||
OR t1.menu_name LIKE '%网站%'
|
||
OR t1.menu_name LIKE '%栏目%'
|
||
OR t1.menu_name LIKE '%评论%'
|
||
OR t1.menu_name LIKE '%预警%'
|
||
OR t1.menu_name LIKE '%问卷%'
|
||
OR t1.menu_name LIKE '%档案%');
|
||
|
||
-- ========================================
|
||
-- 3. 清理孤立的菜单(parent_id指向已删除的菜单)
|
||
-- ========================================
|
||
-- 先删除父菜单被删除但子菜单还存在的情况(应该先执行步骤2再执行这一步)
|
||
-- 注意:这一步需要确保先执行步骤2,否则可能会误删
|
||
|
||
-- 暂时注释掉,因为MySQL不允许在同一个表中删除和查询
|
||
-- 如果需要清理孤立菜单,建议手动检查:
|
||
-- SELECT * FROM sys_menu WHERE parent_id NOT IN (SELECT menu_id FROM sys_menu)
|
||
-- AND menu_name LIKE '%心理%';
|
||
|
||
-- ========================================
|
||
-- 4. 验证清理结果
|
||
-- ========================================
|
||
SELECT '清理完成!当前心理学相关菜单数量:' AS result;
|
||
SELECT menu_name, path, component, COUNT(*) as count
|
||
FROM sys_menu
|
||
WHERE menu_name LIKE '%心理%'
|
||
OR menu_name LIKE '%量表%'
|
||
OR menu_name LIKE '%题目%'
|
||
OR menu_name LIKE '%因子%'
|
||
OR menu_name LIKE '%测评%'
|
||
OR menu_name LIKE '%网站%'
|
||
OR menu_name LIKE '%栏目%'
|
||
OR menu_name LIKE '%评论%'
|
||
OR menu_name LIKE '%预警%'
|
||
OR menu_name LIKE '%问卷%'
|
||
OR menu_name LIKE '%档案%'
|
||
GROUP BY menu_name, path, component
|
||
HAVING count > 1;
|
||
|
||
-- 如果没有输出,说明没有重复菜单了
|