2010-04-21 14 views
10

Tek bir sorguda sipariş toplam tutarını ($) ve fatura sayımını 5 günlük süre içinde seçmeye çalışıyorum. Bunun olmasına rağmen bunu elde edemiyorum. Ben değilim ben burada var şimdiki sorgu ...MySQL DATE_ADD kullanımı, 5 günlük aralık

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' 

tamamen emin DATE_ADD aradığım doğru fonksiyonudur. Ben alıyorum Şu

....

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

Array ( 
    [0] => Array ( 
     [invoice_count] => 68 
     [orders_total] => 14193.20 
     [created] => 1262900809 
    ) 
) 
Ben böyle bir şey daha almak istiyorum

...

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 
    ) 
) 

ben bu yüzden belki mysql tarih fonksiyonları için oldukça yeni Ben sadece mysql docs geçerken ihtiyacım olan işlevi özledim.

UPDATE Sorgumu güncelledim ... Bu, faturaların olduğu her gün için hala bir satır çekmiyor. Yalnızca kullanıcı tarafından karşılanan ve kullanıcı tarafından belirlenen ölçütleri karşılayan 20’den faturalar alınıyor.

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 

cevap

17

tarih yayılma arasındaki kayıtları elde etmek için, kullanım:

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

Bu örnek olacak Bugün ve günler arasında geleceğe (bugün için var olan varsayarak) kayıtlar al. Geçmişe gitmek istiyorsanız DATE_SUB'a bakın.

+0

beni belirtilen zaman dilimi içinde mevcut olmayan herhangi rakamlar için varsayılan değerleri elde etmek mümkün mü? – Webnet

+0

@Webnet: İstediğiniz aralığı kapsayan tarihlerin listesini, tarih ve "oluşturulan" değerine dayalı "IDS_INVOICE" tablosuna SOL JOIN. MySQL'in özyinelemeli alt sorgusu yoktur - ihtiyacınız olan tarih hesaplamasını almak için bir sayı tablosu oluşturabilir veya bir CROSS JOIN kurulumunu kullanabilirsiniz. –

+0

Söylediklerinizin mantığını anlıyorum, mükemmel bir anlam ifade ediyor. "SELECT COUNT (id)" i ingilizce_dosyası FRON ids_invoice LEFT JOIN ids_invoice İLE NOW() VE DATE_ADD (ŞİMDİ(), INTERVAL 5 GÜN) ' olduğundan eminim. ama bahsettiğin şeyin sözdiziminden emin değilim. – Webnet

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

yoksa datetime sadece TARİH bölümünü karşılaştırmak daha iyi olurdu:

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

sizin oluşturulan sütun türü int ise o zaman sadece denemek bu bir

created<= UNIX_TIMESTAMP(DATE_ADD(CURDATE(),INTERVAL 5 DAY))')