2012-12-21 15 views
8
से mysql परिणाम हो रही

संभव डुप्लिकेट:
Get from database but only last 30 daysपिछले 30 दिनों

हाय मैं जो मैं पिछले 30 दिनों से एक डेटाबेस में पंक्तियों की गिनती करने का उपयोग कुछ php कोड है । समस्या यह है कि यदि मैं कोड का टुकड़ा बदलता हूं ताकि संख्या -30 से -20 में बदलती है, तो आउटपुट संख्या 272 से 360 पर जाने के बजाए जाती है।

$result = mysql_query("SELECT * FROM all_count WHERE DATEDIFF(date,NOW()) = -30 and member ='000002'"); 
$num_rows60 = mysql_num_rows($result); 
+0

पूर्ण विवरण में वही प्रश्न http://stackoverflow.com/questions/13912035/display-record-older-than-3-months-in-sql/13912197#13912197 – softsdev

+0

आप रिकॉर्ड्स का चयन कर रहे हैं जो * बिल्कुल * 30 हैं या 20 दिन पुराना। – JJJ

उत्तर

15

इस

select * from `table` where `yourfield` >= DATE_SUB(CURDATE(), INTERVAL 3 MONTH) 

दिनों के लिए प्रयास करें साल उदाहरण के लिए नीचे देखें।

DATE_SUB(CURDATE(), INTERVAL 15 DAY) /*For getting record specific days*/ 

DATE_SUB(CURDATE(), INTERVAL 1 YEAR) /*for getting records specific years*/ 


आनंद के लिए, क्वेरी

BETWEEN DATE_SUB(CURDATE() ,INTERVAL 6 MONTH) AND DATE_SUB(CURDATE() ,INTERVAL 3 MONTH) 
/* For Getting records between last 6 month to last 3 month 
+0

वाह बहुत अच्छी तरह से समझाया –

+0

धन्यवाद, आपकी व्याख्या ने वास्तव में मुझे अंतर समझने में मदद की और यह कैसे किया जाना चाहिए।बहुत बहुत धन्यवाद –

2

आप इस के बजाय का उपयोग कर सकते हैं::

यहाँ कोड है

$result = mysql_query("SELECT * FROM all_count WHERE `date`< DATE(NOW() - INTERVAL 30 DAY) and  member ='000002'"); 
+0

यह पूरी तरह से धन्यवाद –

0

आप प्रलेखन here में देख सकते हैं, MySQL में DATEDIFF समारोह आप के दिनों में अंतर बताता है दूसरी तारीख की पहली तारीख।

आपकी क्वेरी केवल उन सभी पंक्तियों का चयन करती है जहां अंतर बिल्कुल 30 दिन है और 30 दिन पहले तक नहीं। तो यह पूरी तरह से संभव है कि 20 दिन पहले की तारीख के लिए पंक्तियों की संख्या 30 दिन पहले से अधिक है। क्या आप सबसे अधिक संभावना चाहता था:

SELECT * FROM all_count WHERE DATEDIFF(date,NOW()) >= -30 and member ='000002' 
4

यह

`date`< DATE(NOW() - INTERVAL 30 DAY) 
बजाय

DATEDIFF(date,NOW()) = -30 

पहले मामले में तुलना करने के लिए बेहतर है, तारीख ग क्वेरी की शुरुआत में केवल एक बार किया जाता है, और डेटाबेस दिनांक कॉलम पर किसी भी इंडेक्स का उपयोग कर सकता है।

दूसरी क्वेरी को प्रत्येक पंक्ति पर DATEDIFF की गणना करनी चाहिए, और डेटाबेस किसी भी अनुक्रमणिका का उपयोग नहीं कर सकता है। दूसरी क्वेरी एक पूर्ण टेबल स्कैन को मजबूर करती है।

इसके अलावा, मैं दृढ़ता से सुझाव देता हूं कि आप अपना कॉलम date पर कॉल न करें। हां, मुझे पता है कि आप बैकटिक्स के साथ नाम उद्धृत कर सकते हैं, लेकिन यह सिर्फ गन्दा है और जब आप भूल जाते हैं तो आपकी वाक्यविन्यास त्रुटियों को भूलना मुश्किल होगा। कॉलम के लिए एक और वर्णनात्मक नाम के साथ आओ। यह किस तरह की तारीख है? तारीख का प्रतिनिधित्व क्या करता है?

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