2009-11-16 64 views
-1

我目前的查询是:(分开可读性换行)Mysql的得到的行数每天

SELECT DISTINCT DATE(vote_timestamp) AS Date, COUNT(*) AS TotalVotes FROM `votes` 
WHERE vote_target_id='83031' 
GROUP BY DATE(vote_timestamp) ORDER BY DATE(vote_timestamp) DESC LIMIT 30 

哪里vote_timestamp是每个 “投票”,COUNT(*)一个时间当天的点数,而vote_target_id是投票的具体目标。

目前,它适用于目标至少有一次“投票”的所有日子,但是我希望它在没有投票的情况下也将TotalVotes返回为0,而不是根本没有任何投票。

这可以(以及如何?)在MySQL或PHP中完成吗? (或者很好,因为它是由PHP进一步处理的,所以可以使用任何代码)。

谢谢

回答

-2

看着that的解决方案,它看起来对我来说,做这种快速修复可以简单得多。虽然

$result = mysql_query($sql) or die('Internal Database Error'); 
if (mysql_num_rows($result) == 0) { return false; } 
while($row = mysql_fetch_assoc($result)) { 
    $votes[$row['Date']] = $row['TotalVotes']; 
} 
// fill 0s with php rather than using mysql 
$dates = array_keys($votes); 
for ($t = strtotime($dates[count($dates)-1]); $t <= time(); $t +=86400) { 
    $date = date('Y',$t).'-'.date('m',$t).'-'.date('d',$t); 
    if (!array_key_exists($date,$votes)) { 
     $votes[$date] = 0; 
    } 
} 

感谢,

2

的问题是如何产生的不具有行天的记录。 This SO问题有一些方法。