0

PHPループを使用してMySQLテーブル内の特定の日付の出現をカウントしwhile、日付と繰り返し回数をに配置しようとしていますarray。配列に日付を適切に追加することはできますが、繰り返し回数を追加できないようです。

例:

function counter() {
//The 'timestamp' column uses the MySQL timestamp type
$query = mysql_query("SELECT timestamp FROM table1 ORDER BY timestamp DESC");

$date_c;
$counter = 0;
$date_array();

while($row = mysql_fetch_array($query)) {
    //gets the year, month, and day from the timestamp
    $year = substr($row['timestamp'], 0, 4);
    $month = substr($row['timestamp'], 5, 2);
    $day = substr($row['timestamp'], 8, 2);
    $date = $month.'/'.$day.'/'.$year;

    if($date == $date_c) {
        $counter += 1;
    } else {
        array_push($date_array, $date, $counter);
        $counter = 0;
    }

    $date_c = $date;

ただし、echo配列の一部である場合、カウンターは更新されません。これは、次の最初の繰り返し日付を使用した例ですtable1

>>> echo $date;
06/15/2012
>>> echo $counter;
25
>>> echo $date_array[0];
06/15/2012
>>> echo $date_array[1];
0

しばらくこれをいじってみましたが、エラーが見つからないようです。誰かが私が間違っていることを知っていますか?

4

2 に答える 2

2

それらの行で他にやりたいことはありますか?これは私には簡単に思えるので:

 SELECT DATE_FORMAT(timestamp,'%m/%d/%Y') as 'date', COUNT(*) as 'count'
 FROM table1 
 GROUP BY DATE_FORMAT(timestamp,'%m/%d/%Y')
 ORDER BY timestamp DESC

...そしてphpコードの問題は、最後の日付/カウントがプッシュされないことである可能性があります(最後の反復で配列のカウンターがプッシュされなかった場合、whileループが終了した$date_arrayにarray_pushをもう一度実行する必要があります.....)

于 2012-06-19T15:54:56.833 に答える
1

PHPで行う必要はなく、SQLで一意の日付の数を取得できることにWrikkenと同意しました。

ただし、各日付のインスタンスをカウントしたい場合は、PHPの配列の連想配列機能を使用します。だから次のようなもの:

$query = mysql_query("SELECT timestamp FROM table1");
$date_array = array();

while($row = mysql_fetch_array($query)) {
    $year = substr($row['timestamp'], 0, 4);
    $month = substr($row['timestamp'], 5, 2);
    $day = substr($row['timestamp'], 8, 2);

    $date = $month.'/'.$day.'/'.$year;

    // Using the @ symbol to suppress warnings for missing index
    @ $date_array[$date]++;
}

print_r($date_array);

そのループの最後で、$ date_arrayは、日付をキーとして、出現回数を値として持つ連想配列です。

于 2012-06-19T17:25:08.747 に答える