SQL クエリの結果に基づいてカウンターを作成しようとしています。SQLクエリは大量のデータを取得し、行ごとに日数を計算し、合計日数に基づいてその日に含まれる結果の数をカウントする必要があります. カウンターが値を保持していない理由を理解しようとしています。SQLの結果がデータを引き出していることは知っています。何か案は?
アイデアは、開始日と現在の日付の間の日数が 365 日を超えている場合はカウンターを開始し、365 日未満の場合は別のカウンターを開始することです。
$anymatches=mysql_num_rows($result_id);
if ($anymatches > 0 )
{
while($row = mysql_fetch_array($result_id))
{
/*** Performing a calculation to get the number of days ***/
$calctoday = date("Y-m-d"); // trying to capture current date
$sd = start_check_gap($row[1],45); // getting a date from the sql query
$dateDiff = strtotime($calctoday) - strtotime($sd); // probably a better way to do this but calculating the difference between start date and current date.
$totaldays = floor($dateDiff/(60*60*24));
$data = $dateDiff / 86400;
$data = number_format($data, 0, '.', '');
if ($data > 365)
{
$pernumc1 = 0;
while($data > 365)
{
$pernum1 = $pernumc1;
$pernumc1++;
}
}
elseif ($data < 365)
{
$pernumc2 = 0;
while($data < 365)
{
$pernum2 = $pernumc2;
$pernumc2++;
}
}
else
{
$pernumc3 = 0;
while($data != FALSE)
{
$pernum3 = $pernumc3;
$pernumc3++;
}
}
以下のコメントをありがとうございます。他の誰かが同じタイプの問題を抱えている場合に備えて、正しいバージョンを投稿したかった. 無限ループのコメントに基づいて、問題の原因を突き止めることができました。両方の問題です。最初の問題は、SQL クエリにエラーがあったことです。エラーを修正したら、皆さんが言及した無限ループの問題に気付きました。基本的に以下は私がやったことです。各 if() 内の while を削除し、開始カウンター変数 $pernumc1 を最初の while の上に移動したところ、魅力的に機能しました。まだ日付の比較をクリーンアップする必要があるように見えますが、全体的には機能します。
$anymatches=mysql_num_rows($result_id);
if ($anymatches > 0 )
{
$pernumc1 = 0;
$pernumc2 = 0;
$pernumc3 = 0;
while($row = mysql_fetch_array($result_id))
{
$calctoday = date("Y-m-d");
$sd = start_check_gap($row[1],45);
$dateDiff = strtotime($calctoday) - strtotime($sd);
$totaldays = floor($dateDiff/(60*60*24));
$data = $dateDiff / 86400;
$data = number_format($data, 0, '.', '');
if ($data > 548)
{
$pernum1 = $pernumc1;
$pernumc1++;
}
elseif ($data > 365)
{
$pernum2 = $pernumc2;
$pernumc2++;
}
elseif ($data < 365)
{
$pernum3 = $pernumc3;
$pernumc3++;
}
}