ऐसा इसलिए है क्योंकि आप एक mysql डेटाटाइम से एक पूर्णांक तक एक अंतर्निहित कास्ट कर रहे हैं।
उदा. mysql सोचता है कि समय (जैसा कि मैं इसे लिखता हूं) 2011-12-15 13:42:10 है, लेकिन अगर मैंने MySQL को इसमें से 90 घटाने के लिए कहा, तो यह 20111215134210 - 90 =20111215134120 जो कि 13:41:20 है, जो 50 है सेकंड पहले।
या तो समय को एक पूर्णांक के रूप में मानें (एक यूनिक्स टाइमस्टैम्प में/से कनवर्ट करके, जैसा कि शराबविकर द्वारा सुझाया गया है) या दिनांक फ़ंक्शन का उपयोग दिनांक मान पर गणित करने के लिए करें:
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);
(जो स्पष्ट रूप से अनुक्रमणिका अनुकूलन का उपयोग करने में सक्षम नहीं होगा)।