2009-11-16 5 views
-1

Ma question actuelle est:Mysql obtenir le nombre de lignes pour chaque jour

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 

(sauts de ligne séparés pour une meilleure lisibilité)

Où vote_timestamp est un temps pour chaque « vote », le comte (*) est le décompte pour ce jour, et vote_target_id est la cible spécifique du vote.

Actuellement, cela fonctionne pour tous les jours où la cible a au moins un "vote", mais je voudrais aussi retourner TotalVotes comme 0 pour les jours où il n'y a pas de votes, plutôt que de ne pas avoir de ligne.

Est-ce que cela (et comment?) Peut être fait en MySQL ou PHP? (soit est bien, car il est encore traité par PHP donc l'un ou l'autre code peut être utilisé).

Merci

Répondre

-2

En regardant la solution that, il me semble que c'est beaucoup plus simple de faire cette solution rapide qui fonctionne 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; 
    } 
} 

merci bien,

2

Le problème est de savoir comment générer des enregistrements pour les jours qui ont aucune ligne. This SO question a quelques approches.

Questions connexes