Любопытно, почему цикл не показывает второй день данных:

Я пытаюсь прочитать из базы данных, где я храню значения. Я пытаюсь добавить все значения за каждый день, и написал следующий код для этого. По какой-то причине суммируется только строка первого дня. Я уверен, что есть причина, по которой состояние одного из моих циклов не работает, но, думаю, я его игнорирую. Любые быстрые взгляды приветствуются.

$readsum =array();
$totalsum = 0;


for ($i=1; $i <= $numdays; $i++){
$readresult=mysql_query("SELECT * FROM `test`.`cost_table` WHERE `Day`='$i'",$LinkID);



while($rows=mysql_fetch_array($readresult)){
    $readsum[]=$rows['Yield'];
    $readsum[]=$rows['Rolls'];
    $readsum[]=$rows['Utilities'];
    $readsum[]=$rows['Payroll'];
    $readsum[]=$rows['Direct Materials'];
    $readsum[]=$rows['3rd Party'];
    $readsum[]=$rows['Supplies'];
    $readsum[]=$rows['Packaging'];
    $readsum[]=$rows['Rental'];
    $readsum[]=$rows['Other'];
}   

for($i=0; $i <= 9; $i++){
    $totalsum = $totalsum + $readsum[$i];
    }


echo $totalsum;
$totalsum = 0;

}

Прямо сейчас, выход - только одно значение; сумма первого ряда базы данных. Будучи вторым днем ​​месяца, он должен вычислить вторую сумму и повторить ее.

1 ответ

Решение

Чтобы расширить мой комментарий, я бы переписал код для его улучшения:

$readsum =array();
$totalsum = 0;

$readresult=mysql_query("SELECT * FROM `test`.`cost_table` ORDER BY `Day`",$LinkID);

while($rows=mysql_fetch_array($readresult)){
    $readsum[$rows['Day']][]=$rows['Yield'];
    $readsum[$rows['Day']][]=$rows['Rolls'];
    $readsum[$rows['Day']][]=$rows['Utilities'];
    $readsum[$rows['Day']][]=$rows['Payroll'];
    $readsum[$rows['Day']][]=$rows['Direct Materials'];
    $readsum[$rows['Day']][]=$rows['3rd Party'];
    $readsum[$rows['Day']][]=$rows['Supplies'];
    $readsum[$rows['Day']][]=$rows['Packaging'];
    $readsum[$rows['Day']][]=$rows['Rental'];
    $readsum[$rows['Day']][]=$rows['Other'];
}   

//var_dump $readsum to see what you have to work with

foreach($readsum as $day=>$dataArray){
  foreach($dataArray as $rsum){
    $totalsum = $totalsum + $rsum;
  }
  echo $totalsum;
  $totalsum = 0; 
}

В основном вы делаете свой запрос по всему набору.

Просмотрите результаты, чтобы создать приятный и простой в работе ассоциативный массив.

Затем используйте этот массив, чтобы делать с данными все, что вы хотите.

Гораздо больше, многоразово и легко понять.

Другие вопросы по тегам