2

過去 30 日間の実行中のリストで、mysql データベースから特定のクライアントに対して行った呼び出しの数の配列を作成しています。これまでのコードは、配列への呼び出しがある日を追加するために機能しますが、呼び出しのない日 (db にエントリがない) には「0」を表示する必要があります。これまでのコードは次のとおりです。

$query="SELECT COUNT(*) FROM my_db WHERE client_phone='clint_phone#' GROUP BY calldate"; 
$result = mysql_query($query);
    $data = array();
    while ($row = mysql_fetch_row($result)) {
       $data[] = $row[0];
    }

今日は 30 回の通話があり、昨日は 0 回だったかどうかを示す方法が必要なだけです。[30,0] を表示する必要があります。私が持っているのは[30]だけです。

編集 * 私は mysql db が client_phone、calldate 列を持っています。配列内のデータを使用してグラフを作成しようとしています。グラフの各ポイントは、1 日とその日のそのクライアントへのコール数を表します。上記のクエリを作成して、その配列にデータを入力します。30 日間逆算して、毎日の合計通話数を配列に入力しようとしています。

EDIT 2* ほぼ完成しました。「foreach」領域で問題が発生しています。以下は、配列をダンプするための 2 つの print_r() を含むコードです。最初のものは良さそうに見えますが、2 番目のものは上書きされてはならないいくつかの配列エントリを示しています。

$query="SELECT calldate, COUNT(*) FROM my_db WHERE client_phone='phone#' and calldate>='20130101' AND calldate<='20130107' GROUP BY calldate ORDER BY calldate"; 
$result = mysql_query($query);
    $data = array();
    while ($row = mysql_fetch_array($result)) {
      $data[$row['calldate']] = $row[1];
    }

$startDate = '20130101'; 
    $endDate = '20130107'; 
    $dates = array(); 

    for($current = $startDate; $current != $endDate; $current = date('Ymd', strtotime("$current +1 day"))) {
        $dates[] = $current; 
    }
    $dates[] = $endDate;  

print_r ($data);
echo "<br />";

foreach($dates as $date){
if (in_array($date, $data)) {
    // that date was found in your db_date array(therefore had queries)
}else{
$data[$date] = 0; //date was not found in your db_array so we set that date with no   queries to zero
}
}

print_r ($data);

これをブラウザで実行すると、次のようになります。

Array ( [20130101] => 1 [20130104] => 6 [20130105] => 2 [20130106] => 1 [20130107] => 3 ) 
Array ( [20130101] => 0 [20130104] => 0 [20130105] => 0 [20130106] => 0 [20130107] => 0 [20130102] => 0 [20130103] => 0 )

一番上の出力は良さそうに見えますが、data[] 配列にない日付に割り当てられたゼロが欠落しているだけです。2 番目の配列では、欠落している日付にゼロが含まれていますが、上書きされるべきではないその他の日付が上書きされています。

助けてくれてありがとう!

4

1 に答える 1

0

その期間内にあるすべての日付を見つけて、そのタスクを実行することは、実際にはその標準的な解決策ではありません。ただし、ホストで cron タスクが許可されているかどうかによって異なります。cron タスクを使用して、その日の午後 11 時 59 分にデータベースに 0 を自動的に挿入できた場合、その日にクエリが行われなかった場合。単純にすべての日付を抽出できます。

cronタスクでやりたくない場合は、この方法で管理できると思います...

      $startDate = '2009-01-28'; 
        $endDate = '2009-02-04'; 
        $dates = array(); 

        for($current = $startDate; $current != $endDate; $current = date('Y-m-d', strtotime("$current +1 day"))) {
            $dates[] = $current; 

        $dates[] = $endDate;  
    }

次に、これを行います

foreach($dates as $date){
if (array_key_exists($date, $data)) {
    // that date was found in your db_date array(therefore had queries)
}else{
$data[$date] = 0; //date was not found in your db_array so we set that date with no queries to zero
}
}

テストしていないため、多少の調整が必要になる場合があります。しかし、これはうまくいくはずです。それに非常に近いものでなければ。お役に立てれば。

于 2013-01-08T02:07:26.513 に答える