-1

我当前的查询是:

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 进一步处理,因此可以使用任何代码)。

谢谢

4

2 回答 2

2

问题是如何为没有行的日子生成记录。 这个SO question 有一些方法。

于 2009-11-16T03:38:24.353 回答
-2

看看那个解决方案,对我来说,做这个可以工作的快速修复似乎要简单得多。

$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;
    }
}

不过谢谢,

于 2009-11-16T03:47:20.373 回答