Pregunta

Mi consulta actual es:

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

(saltos de línea separados para facilitar la lectura)

Cuando vote_timestamp es un tiempo para cada "voto", Count (*) es el recuento para ese día, y vote_target_id es el objetivo específico de los votos.

En la actualidad, esto funciona para todos los días en los que el objetivo tiene por lo menos un "voto", pero me gustaría también para volver TotalVotes como 0 para los días en que no hay votos, en lugar de tener ninguna fila en absoluto.

Puede esto (y cómo) se realiza en MySQL o PHP? (Ya sea está muy bien, ya que se futher procesada por PHP así que o código puede ser utilizado).

Gracias

¿Fue útil?

Solución 2

En cuanto a que solución, parece que para mí es mucho más simple de hacer esto una solución rápida que funciona sorta.

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

Gracias embargo,

Otros consejos

El problema es cómo generar registros para los días que no tienen filas. Este SO pregunta tiene algunos enfoques.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top