LINUX.ORG.RU

[MySQL] математика с датами

 


0

0

Немного закопался в запросах (а может и вообще, в алгоритмах).

Есть табличка: ____ ____ ______ _____ | id | ip | time | ban | |----|----|------|-----|

При неверных данных во время аутентификации, в эту таблицу попадают, думаю, понятные значения пользователя. И после ему выдается, что осталось у него 5-(mysql_num_rows(его IP)) попыток, при условии, что ban=0. Если ban=1 и time этой записи создан меньше часа назад, то в доступе ему отказано.

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

поле time типа timestamp(14)

★★

форматирование!! :(

Немного закопался в запросах (а может и вообще, в алгоритмах).

Есть табличка:
______________
| id | ip | time | ban |
|---|---|------|-----|

При неверных данных во время аутентификации, в эту таблицу попадают, думаю, понятные значения пользователя. И после ему выдается, что осталось у него 5-(mysql_num_rows(его IP)) попыток, при условии, что ban=0. Если ban=1 и time этой записи создан меньше часа назад, то в доступе ему отказано.

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

поле time типа timestamp(14)

vitroot ★★
() автор топика
Ответ на: комментарий от vitroot

есть, конечно, вариант сразу брать последнюю дату и сравнивать ее с новой перед ее вводом в таблицу... но корректно ли так делать...

vitroot ★★
() автор топика
Ответ на: комментарий от gorilych

наврал. CURRENT_TIMESTAMP() - синоним NOW() и возвращает величину типа datetime.

Используй UNIX_TIMESTAMP() - она без аргумента возвращает timestamp на данный момент.

gorilych ★★
()
Ответ на: комментарий от gorilych

mysql> select current_timestamp();
+---------------------+
| current_timestamp() |
+---------------------+
| 2009-03-13 13:34:50 |
+---------------------+
1 row in set (0.00 sec)

Не понял, а почему вывод в формате DATETIME?

vitroot ★★
() автор топика
Ответ на: комментарий от gorilych

>>наврал. CURRENT_TIMESTAMP() - синоним NOW() и возвращает величину типа datetime.

ага, понятно. спасибо.

vitroot ★★
() автор топика

используй case и два селекта. Первый select count(*) from table where ip=<тут ip> having count(*)>=5, второй select ban from table where ip=<тут ip> and ban!=0

true_admin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.