2009-11-16 2 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 вопрос имеет некоторые подходы.