2010-11-21 11 views
6

मेरे पास 'last_login' नामक डेटाटाइम कॉलम है।MySQL कहां से एक महीने से अधिक है?

मैं अपने डेटाबेस से उन सभी रिकॉर्ड्स का चयन करने के लिए क्वेरी करना चाहता हूं जो पिछले महीने के भीतर लॉग इन नहीं हैं। मैं यह कैसे करु?

$query = $this->query("SELECT u.id, u.name, u.email, u.registered, g.name as group_name FROM `:@users` AS u LEFT JOIN `:@groups` AS g on u.group_id = g.id WHERE u.last_login = ...... LIMIT {$limit_start}, {$limit_end}"); 

: @ = डेटाबेस उपसर्ग

उत्तर

18

date_sub

where u.last_login < date_sub(now(), interval 1 month) 

+0

इस होना चाहिए ">" सही होने के लिए – Lamis

+1

ऐसा कैसे? @JasonS उन सभी उपयोगकर्ताओं को ढूंढना चाहता है जिन्होंने पिछले महीने सिस्टम में लॉग इन नहीं किया है। इसका मतलब है कि उनकी अंतिम लॉगिन तिथि एक महीने पहले होगी। इसलिए, हम उन लोगों को रिकॉर्ड्स प्रतिबंधित करना चाहते हैं जिनके पास एक महीने पहले (i) कम से कम दिनांक (i) कम से कम() से पहले है। उपयोग> आपको केवल उन्हीं उपयोगकर्ताओं को देगा जो अंतिम लॉगिन के आखिरी महीने के दौरान थे। –

10

आप date_addnow के साथ संयुक्त का उपयोग कर सकते हैं:

...where u.last_login < date_add(now(), interval -1 month) 

स्वाभाविक रूप से, के रूप में दोनों MySQL विशिष्ट हैं

यह वही मैं वर्तमान में है यह आपको MySQL बैकएंड तक सीमित करता है। वैकल्पिक रूप से, आप यह पता लगा सकते हैं कि PHP के साथ एक महीने पहले क्या था (मैं एक PHP व्यक्ति नहीं हूं, लेकिन मुझे लगता है कि DateTime::sub उसमें सहायता करेगा) और फिर उस तारीख को अपनी क्वेरी में सामान्य तरीके से शामिल करें अन्य दिनांक/समय क्षेत्र।

-1

matthewh लगभग सही था (पहले जवाब देने के लिए लेकिन मेरे मन में यह अधिक सकारात्मक पूर्णांक उपयोग करने के लिए "प्राकृतिक" है इसी प्रकार के), का उपयोग कर > छोड़कर प्रयास किया जाना चाहिए था एक सही

where u.last_login > date_sub(now(), interval 1 month)

+0

आप सही हैं, यह होना चाहिए> – Lamis

+0

मैं असहमत हूं, इसका उपयोग करके> आपको उन उपयोगकर्ताओं को देगा जो अंतिम लॉगिन एक महीने पहले की तारीख से अधिक था - यानी, उन्होंने पिछले महीने के दौरान लॉग इन किया था। –

संबंधित मुद्दे