you need to generate an intermediate result set with all the dates in it that you want included in the output...
if you're doing this in a stored proc, then you could create a temp table or table variable (I don't knoiw MySQL's capabilities), but once you have all the dates in a table or resultset of some kind
Just join to the real dataa from the temp table, using an outer join
In SQL Server it would be like this
Declare @Dates Table (aDate DateTime Not Null)
Declare @StartDt DateTime Set @StartDt = 'Dec 1 2008'
Declare @EndDt DateTime Set @EndDt = 'Dec 31 2008'
While @StartDt < @EndDt Begin
Insert @Dates(aDate) Values(@StartDt)
Set @StartDt = DateAdd(Day, 1, @StartDt)
End
Select D.aDate, Count(O.*) Orders
From @Dates D Left Join
OrderTable O On O.OrderDate = D.aDate
Group By D.aDate