Сравнение 2 таблиц и отображение пропущенных строк - PullRequest
0 голосов
/ 17 апреля 2019

Недавно мой веб-сайт 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 с двумя другими таблицами и отображения отсутствующих строк в 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, потому что запрос будет длиться вечно, и мой сервер зависает.

В данный момент у меня нет выбора, и я могу прямо сейчас помочь.

1 Ответ

1 голос
/ 17 апреля 2019

вы можете использовать левое соединение

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
...