Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Show values even if empty

Tags:

sql

mysql

I am using the following to show a count of products added over the last 7 days...Can i somehow tailor the query to show all the last 7 days even if COUNT=0?

query as it stands:

SELECT DAYNAME(dateadded) DAY, COUNT(*) COUNT 
FROM `products` 
WHERE (`dateadded` BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND CURDATE() && site_url = 'mysite.com') 
GROUP BY DAY(dateadded)
like image 348
StudioTime Avatar asked Apr 22 '26 22:04

StudioTime


1 Answers

Add a table with dates in it (a dates lookup table), then:

SELECT DAYNAME(d.FullDate) DAY, COUNT(*) COUNT
FROM dates d
LEFT OUTER JOIN products p ON d.FullDate = DATE(p.dateadded) 
    AND p.site_url = 'mysite.com'
WHERE d.FullDate BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND CURDATE()    
GROUP BY d.FullDate

It takes a little bit of storage, yes, but it will make queries like this a lot easier.

Alternatively, you can make a stored procedure that loops through dates between 7 days ago and today and returns one row for each.

like image 76
lc. Avatar answered Apr 24 '26 12:04

lc.