-1

私の現在のクエリは次のとおりです。

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 は投票の特定のターゲットです。

現在、これはターゲットに少なくとも 1 つの「投票」があるすべての日で機能しますが、行がまったくないのではなく、投票がない日には TotalVotes を 0 として返したいと思います。

これ (およびどのように?) を MySQL または PHP で実行できますか? (どちらのコードも使用できるように、PHP によってさらに処理されるため、どちらでも問題ありません)。

ありがとうございました

4

2 に答える 2

2

問題は、行がない日のレコードをどのように生成するかです。 このSOの質問にはいくつかのアプローチがあります。

于 2009-11-16T03:38:24.353 に答える
-2

その解決策を見ると、私にとっては、この簡単な修正を行う方がはるかに簡単であるように見えます。

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

でも、ありがとう

于 2009-11-16T03:47:20.373 に答える