RSS-подписка

RSS-лента

Новые статьи

Последние комментарии


Получать обновления на эл. почту

Ваш e-mail:

Рассылка новостей от Loco

Удаление из таблицы записей, если значения поля нет в другой таблице

Нет картинки Часто в проектах, где есть личные кабинеты и возможна регистрация любого проходящего, то там плодятся лжезаписи спамщиков и прочей нечисти. Ударим добрым крон-ботом по каждому спам-боту. И вперёд к светлому будущему!

Такой запрос удалит данные и в таблице user, и в таблице token.

DELETE
FROM `user` t1
LEFT JOIN `token` t2
WHERE t1.confirmed_at IS NULL
AND FROM_UNIXTIME(t1.created_at) < DATE_SUB(NOW(), INTERVAL 3 DAY)
AND t1.id = t2.user_id
ORDER BY t1.created_at
LIMIT 10;

Но грамотнее проектировать базу данных, создавать связи в mysql таким образом, чтобы удаление делала сама MySQL и осиротевших записей не оставалось.

Если вы всё правильно настроите, тогда достаточно будет запроса лишь к таблице user:

DELETE
FROM `user`
WHERE confirmed_at IS NULL
AND FROM_UNIXTIME(created_at) < DATE_SUB(NOW(), INTERVAL 3 DAY)
ORDER BY created_at
LIMIT 10;

Дальше можно этот запрос поместить в файлик .sql и вызывать по крону на сервере. Это запрос на удаление строк пользователей, которые зарегистрировались на сайте, но за 3 дня не активировали свой аккаунт. Зачем вам такие нерешительные люди (в большинстве это спам-боты), избавляйтесь и не копите мёртвые души.

Источник: loco.ru

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Вы можете почитать все статьи от almix'а.



Другие статьи по этой теме:

Комментарии (0)     Подпишитесь на RSS комментариев к этой статье.