2010-04-21 14 views
10

मैं एक ही क्वेरी में 5 दिन की अवधि में ऑर्डर कुल योग ($) और चालान गणना का चयन करने का प्रयास कर रहा हूं। हालांकि ऐसा होने के लिए मुझे ऐसा प्रतीत नहीं होता है। वर्तमान क्वेरी मैं यहाँ है ...MySQL DATE_ADD उपयोग, 5 दिन अंतराल

SELECT 
    COUNT(id) as invoice_count, 
    SUM(orderTotal) as orders_sum, 
    UNIX_TIMESTAMP(created) as created 
FROM ids_invoice 
WHERE DATE_ADD(created, INTERVAL +1 DAY) 
AND userId = 23 LIMIT 5' 

मैं नहीं कर रहा हूँ पूरी तरह से यकीन है कि DATE_ADD सही समारोह मैं तलाश कर रहा हूँ है।

वर्तमान में मैं हो रही है ....

Array ( 
    [0] => Array ( 
     [invoice_count] => 420 
     [orders_total] => 97902.90 
     [created] => 1252596560 
    ) 
) 

Array ( 
    [0] => Array ( 
     [invoice_count] => 68 
     [orders_total] => 14193.20 
     [created] => 1262900809 
    ) 
) 

मैं की तरह कुछ अधिक प्राप्त करना चाहते हैं ...

Array ( 
    [0] => Array ( 
     [invoice_count] => 18 
     [orders_total] => 4902.90 
     [date] => 04-19-2010 
    ) 
) 

Array ( 
    [0] => Array ( 
     [invoice_count] => 12 
     [orders_total] => 5193.20 
     [date] => 04-20-2010 
    ) 
) 

मैं तो शायद mysql तारीख कार्यों के लिए काफी नई कर रहा हूँ मैसक्ल डॉक्स के माध्यम से जाने पर मुझे बस उस फ़ंक्शन को याद किया गया था।

अद्यतन मैंने अपनी क्वेरी अपडेट की है ... यह अभी भी प्रत्येक दिन के लिए चाल खींचता नहीं है जिसके लिए चालान थे। यह केवल 1 9वीं से चालान खींच रहा है जब 20 वीं से चालान उपयोगकर्ता आईडी मानदंडों को पूरा करते हैं।

SELECT 
    COUNT(id) as invoice_count, 
    SUM(orderTotal) as orders_sum, 
    UNIX_TIMESTAMP(created) as created 
FROM ids_invoice 
WHERE 
    created BETWEEN "2010-04-19 00:00:00" AND DATE_ADD("2010-04-19 00:00:00", INTERVAL +5 DAY) AND 
    userId = 17 

उत्तर

17

एक तिथि अवधि के बीच रिकॉर्ड प्राप्त करने के लिए, का उपयोग करें:

WHERE created BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 5 DAY) 

यह उदाहरण होगा भविष्य में आज और दिनों के बीच के लिए आपको रिकॉर्ड प्राप्त करें (आज के समय के लिए कोई भी अस्तित्व है)। यदि आप अतीत में जाना चाहते हैं तो DATE_SUB को देखें।

+0

यह मुझे किसी भी आंकड़े कि निर्दिष्ट समय सीमा के भीतर मौजूद नहीं है के लिए डिफ़ॉल्ट मान पाने के लिए संभव है? – Webnet

+0

@ वेबनेट: तिथि और 'बनाए गए' मान के आधार पर आपको 'IDS_INVOICE' तालिका पर बाएं जुड़ने के लिए, इच्छित सीमा तक फैले तिथियों की एक सूची की आवश्यकता है। MySQL में रिकर्सिव सबक्वायरींग नहीं है - आप एक संख्या तालिका बना सकते हैं, या जिस तारीख की गणना की आवश्यकता है उसे प्राप्त करने के लिए क्रॉस जॉइन सेटअप का उपयोग कर सकते हैं। –

+0

मैं जो कह रहा हूं उसका तर्क समझता हूं, यह सही समझ में आता है। आप कह रहे हैं कि मुझे 'आईडी (आईडी) को ids_invoice से invoice_count के रूप में चुनने की आवश्यकता है, जबकि अभी खरीदें() और DATE_ADD (अब(), इंटरवल 5 दिन) मुझे यकीन है कि यह स्पष्ट है .... लेकिन मुझे यकीन नहीं है कि आप किस बारे में बात कर रहे हैं उसका वाक्यविन्यास। – Webnet

0
WHERE created <= NOW() AND created >=NOW() - INTERVAL 5 DAY 

या यह बेहतर होगा datetime की सिर्फ तिथि हिस्सा तुलना करने के लिए:

WHERE DATE(created) <= date(NOW()) AND 
    DATE(created) >= DATE(NOW() - INTERVAL 5 DAY) 
2

यदि आपका बनाई स्तंभ प्रकार int है तो बस कोशिश यह एक

created<= UNIX_TIMESTAMP(DATE_ADD(CURDATE(),INTERVAL 5 DAY))') 
संबंधित मुद्दे