我必须显示每天(从第一次投票到最后一次投票)用户投票给投票2的票数。
我当前的查询工作得很好;但是当某一天没有任何投票时,我就有麻烦了。例如,对于poll 2,这应该是结果:
2017年5月11日=1
2017年5月12日=0
2017年5月13日=0
2017年5月14日=0
2017年5月15日=0
2017年5月16日=0
2017年5月17日=1
2017年5月18日=0
2017年5月19日=0
2017年5月20日=2
……但是我得到的是:
2017年5月11日=1
2017年5月17日=1
2017年5月20日=2
所以,我需要的是,所有没有记录的日子(在第一次投票和最后一次投票之间)也会出现在选举结果中。这是我当前的查询:

SELECT DATE(poll_vote.date_insert) AS date_insert,
COUNT(poll_vote.id_vote) AS q
FROM poll_vote WHERE poll_vote.id_poll = 2
GROUP BY DATE(date_insert) ORDER BY date_insert

下面是SQL Fiddle和示例数据。谢谢!

最佳答案

正如@Strawberry所建议的,我最终用php而不是mysql编写了一个解决方案。对任何感兴趣的人来说,这是密码。
此解决方案只在空白日期之间的1天内返回0,因为这是我所需要的。例子:
2017年5月11日=1
2017年5月16日=0
2017年5月17日=1
2017年5月19日=0
2017年5月20日=2
这样我就可以像这样显示趋势线图:mysql - 按天分组记录,包括MySQL之间不包含记录的天数-LMLPHP

$sql = 'SELECT DATE(poll_vote.date_insert) AS date_insert, COUNT(poll_vote.id_vote) AS q FROM poll_vote WHERE poll_vote.id_poll = :id_poll GROUP BY DATE(date_insert) ORDER BY date_insert';

$stmt = cnn()->prepare($sql);
if($id_poll) $stmt->bindValue(':id_poll', $id_poll, PDO::PARAM_INT);
$stmt->execute();
$data = $stmt->fetchAll();

# insert blank dates between existing dates
$hotness = array();
foreach($data as $item) {
    if(!$temp) {
        $temp = $item['date_insert'];
    } else {
        $date_past = new DateTime($temp);
        $date_now = new DateTime($item['date_insert']);
        $diff = $date_now->diff($date_past)->format("%a");
        if($diff > 1) {
            $date_new = new DateTime($item['date_insert']);
            $date_new->modify('-1 day');
            $hotness[] = array(
                'date_insert' => $date_new->format('Y-m-d'),
                'q' => 0
            );
        }
    }
    $hotness[] = array(
        'date_insert' => $item['date_insert'],
        'q' => $item['q']
    );
}

# final result
print_r($hotness);

10-07 20:34