2010-04-15 19 views
5

में है, मुझे जटिल SQL क्वेरी के साथ हमेशा परेशानी होती है।MySQL से पंक्तियां प्रदर्शित करें जहां डेटाटाइम अगले घंटे

यह मैं क्या

$query = ' 
      SELECT id, 
        name, 
        info, 
        date_time 
      FROM acms_events 
       WHERE date_time = DATE_SUB(NOW(), INTERVAL 1 HOUR) 
        AND active = 1 
      ORDER BY date_time ASC 
      LIMIT 6 
     '; 

है मैं 6 पंक्तियों को एक घंटे के भीतर आगामी रहे हैं अप करने के लिए प्राप्त करना चाहते हैं है। क्या मेरी क्वेरी गलत है? ऐसा लगता है कि जब मैं इसका परीक्षण करता हूं तो अगले घंटे के भीतर आने वाली घटनाएं नहीं होती हैं।

इसके लिए सही वाक्यविन्यास क्या है?

उत्तर

8

मैं मान्यता है कि तुम रिकॉर्ड DATETIME मानों की एक श्रेणी को शामिल के एक समूह पर देख रहे हैं जा रहा हूँ, तो आप शायद अधिक कुछ इस तरह हैं:

SELECT id, 
     name, 
     info, 
     date_time 
FROM acms_events 
    WHERE date_time < DATE_ADD(NOW(), INTERVAL 1 HOUR) 
     AND date_time >= NOW() 
     AND active = 1 
ORDER BY date_time ASC 
LIMIT 6 

अन्यथा, आपकी क्वेरी लग रही है की दिनांक_टाइम के साथ रिकॉर्ड्स के लिए बिल्कुल "अब + 1 घंटा"। मुझे लगता है कि आपकी सभी तिथियां उस विशेष दूसरे के लिए विशिष्ट नहीं हैं। ;)

थोड़ा, DATE_ADD() स्पष्ट करने के लिए और DATE_SUB() सटीक timestamps लौटने के लिए, तो आपकी क्वेरी मोटे तौर पर ऊपर SELECT ... WHERE date_time = '2010-04-14 23:10:05' ORDER BY ... की तरह कुछ करने के लिए अनुवाद है, जो मुझे नहीं लगता कि आप क्या चाहते है।

+0

हाँ, यह अंतिम अनुच्छेद मैं क्या सोचा था कि यह क्या कर रही हो सकता है! आपके उत्तर के लिए धन्यवाद। मुझे इसकी कोशिश करने दीजिए। – alex

0
WHERE date_time = DATE_SUB(NOW(), INTERVAL 1 HOUR) 

का मतलब है कि डेट_टाइम ठीक उसी समय बराबर बराबर है, जिसके परिणामस्वरूप वास्तव में एक घंटा पुराना रिकॉर्ड होगा।

का उपयोग नहीं क्यों

WHERE TIMEDIFF(date_time, NOW()) < '01:00:00' 
AND date_time > NOW() 
+0

क्यों नहीं? चूंकि MySQL को एक बार सीमाओं की गणना करने के बजाय प्रत्येक पंक्ति के लिए 'TIMEDIFF (date_time, NOW())' अभिव्यक्ति का मूल्यांकन करना होगा, और आपके पास 'date_time' पर मौजूद किसी भी अनुक्रमणिका का उपयोग नहीं किया जाएगा। अनुस्मारक के लिए – Duncan

+0

Thx। –

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