我必须显示每天(从第一次投票到最后一次投票)用户投票赞成投票数 2 的投票数。
我当前的查询工作正常;但是当某一天没有任何投票权时,我遇到了麻烦。例如,对于民意调查 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。谢谢!
答案 0 :(得分:0)
正如@Strawberry所建议的,我最终用php而不是mysql编写了一个解决方案。对于任何有兴趣的人,请参阅以下代码。
此解决方案仅在空白日期之间的1天内返回0,因为这是我所需要的。例如:
$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);