Часто стоит задача удалить всех пользователей которые зарегистрировались но не активировали свои учетные данные. В большинстве случаев это происходит из-за спама и прочих рассылок. Итак всё будем делать через phpMyAdmin.
Первый пример перечисляет пользователей, которые не были активированы в течение установленного количества дней. Второй скрипт сначала создает временную таблицу пользователей, которые должны быть удалены, затем удаляет записи этих пользователей из таблицы _user_usergroup_map и удаляет их из таблицы _users.
Этот пример может работать без временной таблицы, но он упрощает запросы, когда связанные таблицы, созданные сторонними компонентами во время регистрации, также должны быть очищены.
Не забудьте сначала сделать резервную копию базы данных, на всякий случай! Замените 'puhj1' на свой собственный префикс таблицы и установите переменную @days на требуемое количество дней.
Перечислите кандидатов, указав хэш активации в качестве проверки:
Пример 1:
SET @days = 10;
SELECT id, username, DATE_FORMAT(registerDate, '%Y-%m-%d') AS registered, activation FROM puhj1_users
WHERE ((registerDate < DATE_SUB(CURRENT_DATE, INTERVAL @days DAY)) AND (activation NOT IN (' ', '0')));
Пример 2:
SET @days = 10;
DROP TEMPORARY TABLE IF EXISTS delete_users;
CREATE TEMPORARY TABLE delete_users
SELECT id FROM puhj1_users
WHERE ((registerDate < DATE_SUB(CURRENT_DATE, INTERVAL @days DAY)) AND (activation NOT IN (' ', '0')));
DELETE m FROM puhj1_user_usergroup_map m INNER JOIN delete_users ON id = user_id;
DELETE u FROM puhj1_users u INNER JOIN delete_users d ON d.id = u.id;
Не забываем прописывать префикс))