Това е, защото правите имплицитно прехвърляне от mysql datetime към цяло число.
напр. mysql смята, че времето (докато пиша това) е 2011-12-15 13:42:10, но ако помоля mysql да извади 90 от това, ще работи 20111215134210 - 90 =20111215134120 Което е 13:5, което е 13:5 преди секунди.
Или третирайте времето като цяло число (чрез преобразуване към/от времеви печат на unix, както е предложено от liquorvicar) или използвайте функциите за дата, за да изчислите стойността на датата:
SELECT *,
timediff(NOW(), attempt_time) diff,
timediff(NOW(), attempt_time + INTERVAL 90 SECONDS) pending,
NOW() nw
FROM failed_login
WHERE (username = 'some_username'
OR attempt_ip = '127.0.0.1')
AND NOW() - INTERVAL 90 SECONDS > attempt_time;
(обърнете внимание, че пренаписах и последния израз на филтъра, така че колоната на таблицата да е изолирана от едната страна на израза - което има малка полза от скоростта, когато колоната не е индексирана, но огромна полза, когато е индексирана).
Или с помощта на секунди-от-епоха....
SELECT *,
UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(attempt_time) diff,
UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(attempt_time) + 90 pending,
NOW() nw
FROM failed_login
WHERE (username = 'some_username'
OR attempt_ip = '127.0.0.1')
AND UNIX_TIMESTAMP(NOW()) - 90 > UNIX_TIMESTAMP(attempt_time);
(което очевидно няма да може да използва оптимизация на индекса).