Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

परेशान php/Mysql समय अंकगणितीय व्यवहार

ऐसा इसलिए है क्योंकि आप एक 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);

(जो स्पष्ट रूप से अनुक्रमणिका अनुकूलन का उपयोग करने में सक्षम नहीं होगा)।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. यादृच्छिक संख्या उत्पन्न करने के लिए एल्गोरिदम

  2. स्थानीय अनुक्रम विन्यास के लिए एक पर्यावरण चर का उपयोग करना

  3. कैसे एक mysql तालिका में लापता पंक्तियों (तारीखों) को खोजने के लिए?

  4. गंभीर त्रुटि:किसी सदस्य फ़ंक्शन क्वेरी को कॉल करें () PHP क्लास

  5. डॉकर एप्लिकेशन को MySQL से कनेक्ट नहीं कर सकता