Я просто попытался вставить две строки с текущей датой и временем, а затем вычислил прошедшее время с этой даты.
Вот строки из моей таблицы после двух вставок и использования функции NOW () для установки метки времени:
mysql> select * from pendingActivations;
+--------+------------+---------------------+
| userId | code | timestamp |
+--------+------------+---------------------+
| 2 | aaa | 2010-08-23 17:04:02 |
| 2345 | alkfjkla23 | 2010-08-23 16:59:53 |
+--------+------------+---------------------+
Через несколько минут после вставки строки с userId, равным 2, я выполнил следующую команду, которая, как я надеялся, даст мне истекшее время из отметки времени для каждой строки. Вот результаты:
mysql> select userId, code, timestamp, NOW() - timestamp as elapsedSeconds from pendingActivations;
+--------+------------+---------------------+----------------+
| userId | code | timestamp | elapsedSeconds |
+--------+------------+---------------------+----------------+
| 2 | aaa | 2010-08-23 17:04:02 | 136.000000 |
| 2345 | alkfjkla23 | 2010-08-23 16:59:53 | 4585.000000 |
+--------+------------+---------------------+----------------+
Интересно, как во втором ряду было такое огромное значение elapsedSeconds, которое указывает, что прошло ровно 1 час, 16 минут и 25 секунд, хотя легко увидеть, что с тех пор прошло всего около 5 минут.
Вот структура таблицы:
mysql> describe pendingActivations;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| userId | int(11) | NO | PRI | NULL | |
| code | varchar(32) | NO | UNI | NULL | |
| timestamp | datetime | NO | | NULL | |
+-----------+-------------+------+-----+---------+-------+
Есть идеи и / или объяснения?