Как поставить условие, при невыполнении которого удаляется запись в бд через n-ое время?
Например мой случай: у меня есть таблица с полем email_status, который принимает в себя два значения - 0 и 1. Мне нужно сделать так, чтобы при каждом добавлении новой записи в бд через 24 часа проверить чему равно поле email_status, и если оно равно нулю, то удалять его, скажите как мне это получше сделать?
Попробуй переверни логику по другому:
Не удалять 'по крону' запись, а при чтении из базы выводить только те записи, которые удовлетворяют условию - запись не старее 24h и email_status!=0
Само же удаление производить когда-нибудь потом, время выбирать уже тебе и разово для всей базы а не для одной записи.
У меня на сайте есть кое-какие нюансы:
1) Если пользователь не подтвердит учетную запись, то он не сможет туда войти
2) У меня на сайте логин или почта не может быть одинаковой, и если пользователь ввел чужую почту, то когда владелец почты захочет зарегистрироваться, то он не сможет заново отправить запрос на регистрацию, так как ему просто высветиться ошибка о том, что пользователь с такой почтой уже существует, поэтому я хочу именно удалить запись из бд, если пользователь не подтвердит почту в течении 24 часов
Автор просто не понимает всей сути, он пытается сделать какой-то велосипед.
Но в тоже время, проще и как по мне лучше будет сделать отдельный скрипт, который будет удалять все записи 'по крону', которые не удовлетворяют условиям.
Pro_Hacker, я дал максимально подходящий вариант
когда ты проводишь проверку наличия пользователя с уже занятой почтой, ты проверяешь дату создания записи (поле заведи и заполняй его now) и если она истекла ты разрешаешь регистрацию (в базе само собой убрать условие constraint, кстати в этот момент можно и вызвать удаление устаревшей записи, тогда и условие нервенства логина почте можно оставить)
rPman, Как я понял ты предлагаешь мне добавить в условие проверки почт запись "где email_status неравно 0 и дата(но тут короче отнимаем 1 день от сегодняшней даты)" и когда почты равны, но второе условие ложно, то добавить запись с этой же почтой в бд снова?
Akina, у меня просто одна проблема: на поле с почтами стоит индекс UNIQUE и если я попытаюсь добавить 2 записи с одинаковыми значениями, то бд вернет мне ошибку
Pro_Hacker, что-то я не понял связи - то есть от слова "совсем". Какое отношение имеет эта уникальность к описанной проблеме? не успел отправить? ну так надо не удалять втихомолочку, а плотно разбираться, какого рожна письмо не было отправлено. Ведь это явный косяк - причём ещё на стадии проектирования.
А главное - за каким вообще поле сделано уникальным? Что там в предметной области может быть такого, что два письма на одно мыло - совершенно невозможный криминал?
Pro_Hacker, да
правда с точки зрения производительности не так красиво (удаления и вообще запись дает больше нагрузку на базу чем чтения)
выше замечание было хорошее, поэтому советую сделать так
делаешь запрос в базу без условия по дате,, но значение даты создания получаешь, проверяешь на бакэнде, если оно старее суток - запись обновляешь и все хорошо, запрос на регистрация принята, если новее - то отлуп на занятый емейл