最近我的joomla 1.5网站被垃圾邮件注册作为目标,所以我去了phpmyadmin并开始过滤并删除jos_users中的那些注册,但我完全忘记了joomla注册还有2个表依赖项(jos_core_acl_groups_aro_map和jos_core_acl_aro)所以现在我有jos_users有90.000行和其他2个依赖关系表,包含120.000行。
我发现这个SQL命令填充了3个表:
insert into jos_core_acl_aro (section_value, value, name)
select 'users', id, name from jos_users;
但是我发现在使用120.000注册的实际网站上使用这个风险太大了,它还将恢复我已经在jos_users中删除的垃圾邮件注册
我需要一个SQL命令来比较jos_users表和其他2个表,并在jos_core_acl_groups_aro_map和jos_core_acl_aro中显示缺少的行,这些是我从jos_users中删除的行。
我试过这个命令:
select *
from tcpt_users
where tcpt_users.id not in (select tcpt_core_acl_groups_aro_map.aro_id
from tcpt_core_acl_groups_aro_map)
但这不起作用,它让mysql尖叫内存,我的服务器将崩溃。
一些方向将受到欢迎。
编辑:
好的,我得到了你共享的别名概念,所以我运行了以下命令:
select *
from tcpt_users a
left join tcpt_core_acl_aro b on a.id = b.value
where b.value is null
但仍然驱动mysql服务器疯狂影响我的服务器负载从一开始就命令格式良好我可能有一些服务器限制有没有办法限制显示的行数?
编辑1:我想我想出了行限制,这就是我跑的:
select *
from tcpt_users a
left join tcpt_core_acl_aro b on a.id = b.value
where b.value is null
LIMIT 25
它发生同样我必须重新启动mysql因为查询将永远持续,我的服务器冻结。
我现在没有选择,我现在可以使用一些帮助
你可以使用左连接
select * from tcpt_users a
left join tcpt_core_acl_groups_aro_map b on a.id =b.aro_id
where b.aro_id is null