Я пытаюсь настроить sql db, где пользователи должны подтвердить свой адрес электронной почты. Мне интересно, есть ли способ автоматического удаления пользователей в sql db, которые пытались зарегистрировать (отправить их информацию), но не подтвердить свой адрес электронной почты после x количества минут.
сценарий, который я написал, вставляет свою информацию прямо в db, а затем обновляет столбец на db до «ACTIVE», как только пользователи подтвердили, поэтому я не вставляю данные после их активации, но прежде со статусом "НЕ АКТИВЕН". Затем, когда они подтверждают свой адрес электронной почты, этот статус переходит в «АКТИВНО».
поэтому, если пользователи отправляют свою информацию, но не подтверждают свой адрес электронной почты, их данные все еще находятся в БД. Мне нужно что-то, что автоматически удалит строку со статусом «NON_ACTIVE» через x минут, когда они отправят свою информацию. У меня есть еще одна колонка в БД с их точным временем и датой отправки.
есть идеи?
Я бы написал заявление, подобное @Lars:
DELETE FROM users WHERE (mailsent < NOW() - INTERVAL @x MINUTE) AND (state = 'NON_ACTIVE')
но вам не нужно иметь задание cron или триггер для этого. Просто разместите его на одной из страниц PHP, доступ к которым вы можете получить (например, на странице входа или регистрации?). Это может даже быть настроено не запускать каждый раз, но сказать, один раз для каждых сотен логинов, если вы не возражаете, некоторые записи удаляются через несколько секунд или минут спустя.
SQL будет DELETE FROM users WHERE (now() - mailsent) > (120*60) AND state = "NON_ACTIVE"
, где пользователи – это имя таблицы, mailsent – метка времени почтового рассылки и 120 – количество минут, которое вы хотите, тайм-аут.
Вы можете просто запустить эту команду с помощью cronjob в linux-системе с cron -e someUser
и ввести следующую строку
* * * * * mysql myDatabase < 'DELETE FROM users WHERE (now() - mailsent) > (120*60) AND state = "NON_ACTIVE"'
Это будет запускать команду каждую минуту. Обратите внимание, что ваш someUser должен иметь доступ к базе данных mysql без пароля, например, поместив пароль в $ HOME / .my.cnf
Сохраните время создания строки в новом столбце.
Иметь другой скрипт (называемый cron?) Или часть вашего другого кода сайта, периодически удалять любые / все строки в таблице с Status = "NON_ACTIVE", которые были созданы больше, чем X минут назад.
Psudeo-sql: Удалить из UserTable Где (status = "NON_ACTIVE" И (Минуты (now () – createdate))> 30);
Два задания, пытающихся удалить одну и ту же запись, – это возможное состояние гонки, но не очень плохое.
Нет необходимости использовать базу данных вообще. Просто спросите пользователя о своей электронной почте, отправьте ссылку для подтверждения и начните регистрацию только после того, как эта ссылка будет нажата.
Как насчет использования события mysql?
https://dev.mysql.com/doc/refman/5.1/en/events.html
CREATE EVENT delete_event ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY ON COMPLETION PRESERVE DO BEGIN DELETE messages WHERE date < DATE_SUB(NOW(), INTERVAL 7 DAY); END;
Я нашел его здесь