Одним из очевидных решений было бы создать таблицу, содержащую каждую дату в диапазоне, и выбрать свои данные, оставленные присоединенными к этому:
CREATE TABLE days ( day DATE NOT NULL, PRIMARY KEY day );
INSERT INTO days (day) VALUES (20110101);
INSERT INTO days (day) VALUES (20110102);
....
SELECT days.day, yourtable.*
FROM days LEFT JOIN yourtable
ON days.day=yourtable.day;
В качестве альтернативы, вы можете ввести пропущенные дни, используя PHP (но я думаю,код довольно некорректен):
// ensure your qry returns DATE_FORMAT(day, '%Y-%m-%d') AS day
$lastday='';
while ($r=mysql_fetch_assoc($qry_result)) {
if (!$lastday) $lastday=$r['day'];
while ($r['day']>$lastday) {
print $lastday . "\n";
$lastday=add_day($lastday);
}
unset($r['day']);
print $lastday . ',' . implode(',', $r) . "\n";
}
function add_day($day)
{
list($yr, $mo, $da)=explode('-',$day);
$t=mktime(4,0,0,$mo, $da, $yr)+24*60*60; // NB not all days are 24 hours
return date('Y-m-d',$t);
}