Проверьте, добавлена ​​ли запись mySQL за последние x секунд

96
5

У меня есть база данных mySQL и таблица, в которой создаются новые записи для проекта. Каждый созданный проект имеет "имя проекта" и дату создания события (типа DATETIME).


Существует два проекта, созданных с тем же именем, но если они будут созданы одним и тем же пользователем в быстрой последовательности, можно с уверенностью предположить, что это была ошибка в пользовательской части (дважды щелкая, обновляя браузер, когда переменные события передаются и т.д.).


Как написать инструкцию SQL, чтобы проверить, существует ли запись с тем же именем, она была добавлена ​​за последние 10 секунд? Пока у меня есть следующее, хотя я не знаю, как проверить последние 10 секунд.


select * from projects where user = 'johnsmith' AND projectname = 'test' AND active='y' AND DATE(projectcreatedon) = CURRENT_DATE AND DATEPART() < ....?

спросил(а) 2021-01-19T16:08:29+03:00 2 месяца, 4 недели назад
1
Решение
115

replace AND DATE (projectcreatedon) = CURRENT_DATE И DATEPART() <....? с:

AND projectcreatedon > (now() - INTERVAL 10 SECOND)

ответил(а) 2021-01-19T16:08:29+03:00 2 месяца, 4 недели назад
75

Я бы предложил не хранить такие проверки в MySQL, потому что это может быть не лучший способ узнать ошибки, потому что пользователь может щелкнуть по адресу или обновить страницу через 10 секунд. Вместо этого поместите проверки в интерфейсный код, чтобы отключить нажатие кнопки отправки дважды или перенаправить пользователя на страницу, где никакие переменные не передаются.


Но если это не то, что вы хотели бы сделать, это может быть ваш запрос:

SELECT *
FROM `projects`
WHERE `user` = 'johnsmith'
AND `projectname` = 'test'
AND `active`='y'
AND TIMESTAMPDIFF(SECOND, projectcreatedon, now()) > 10;

ответил(а) 2021-01-19T16:08:29+03:00 2 месяца, 4 недели назад
44

Вы пытаетесь исправить проблему не так. Почему бы не устранить проблему у источника? Невозможно, чтобы пользователь мог последовательно создавать эти два проекта.


Если ваше приложение позволяет пользователю несколько раз отправлять форму через обновление, рассмотрите возможность использования перенаправления после обработки переменных GET/POST.


Кроме того, используйте простые клиентские трюки, чтобы отключить кнопку отправки после того, как она была нажата один раз. Вы можете выполнить это с очень маленьким количеством jQuery

ответил(а) 2021-01-19T16:08:29+03:00 2 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема