Mysql получить количество строк за каждый день - PullRequest
0 голосов
/ 16 ноября 2009

Мой текущий запрос:

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

(разрывы строк разделены для удобства чтения)

, где voice_timestamp - это время для каждого "голосования", Count (*) - это счет за этот день, а voice_target_id - конкретная цель голосования.

В настоящее время это работает для всех дней, в которых у цели есть хотя бы один «голос», но я бы хотел, чтобы TotalVotes возвращали 0 для дней, когда нет голосов, вместо того, чтобы вообще не иметь строки.

Можно ли это (и как?) Сделать в MySQL или PHP? (либо все в порядке, так как он далее обрабатывается PHP, поэтому можно использовать любой код).

Спасибо

Ответы [ 2 ]

2 голосов
/ 16 ноября 2009

Проблема заключается в том, как создавать записи для дней, в которых нет строк. У этого ТАКОГО вопроса есть несколько подходов.

0 голосов
/ 16 ноября 2009

Глядя на это решение, мне кажется, гораздо проще сделать это быстрое исправление, которое работает сорта.

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

спасибо, хотя,

...