Правильно ли я составил код хранимой процедуры?

DELIMITER //

BEGIN

SET @email = (SELECT email FROM accounts WHERE id = uid LIMIT 1);
SET @rdt = (SELECT regDT FROM accounts WHERE id = uid LIMIT 1);
SET @now = NOW();

IF @email IS NULL AND @now > DATE_ADD(@rdt, INTERVAL 7 DAY) THEN 
UPDATE accounts SET blocked = 1 WHERE id = uid LIMIT 1;
END IF;

END//

Процедура получает на вход ID пользователя [uid], затем получает в переменные дату регистрации и адрес эл. почты. Далее проверяет, ввёл ли пользователь свою почту и сколько дней прошло с даты регистрации. Если почта не введена и с даты регистрации прошло более недели, то блокирует аккаунт.

Таблица accounts:
CREATE TABLE IF NOT EXISTS `accounts` (
  `id` bigint(20) NOT NULL COMMENT 'Идентификатор пользователя',
  `login` tinytext NOT NULL COMMENT 'Логин',
  `pass` tinytext NOT NULL COMMENT 'Пароль',
  `email` tinytext COMMENT 'Почта',
  `regDT` datetime NOT NULL COMMENT 'Дата и время регистрации',
  `regIP` varchar(15) NOT NULL DEFAULT '0.0.0.0' COMMENT 'Регистрационный IP',
  `blocked` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Заблокирован?'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Аккаунты';
  • Вопрос задан
  • 266 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
UPDATE `accounts` 
    SET `blocked` = 1
    WHERE `email` IS NULL 
        AND `regDT` < NOW() - INTERVAL 7 DAY
        AND `id` = :uid

Ну или убрать последнюю строчку если надо разом все такие записи заблокировать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@dmitryKovalskiy
программист средней руки
Нормальная хранимка. но можно попробовать одним запросом сделать UPDATE
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы