Ayuda con la suma correcta de estos datos + PHP

Iniciado por adryan310, 30 Enero 2014, 00:00 AM

0 Miembros y 1 Visitante están viendo este tema.

adryan310

Saludos,

Tengo el siguiente while donde recorro todos los datos devueltos por la base de datos, dentro del while agrupo los resultados donde NumGame y Teams sea igual al que estuvo antes y voy sumando los campos que tienen el += pero algo estoy haciendo mal ya que la suma de esos campos no me esta dando correctamente, si me agrupa bien los datos pero no me los suma bien, alguna ayuda?
Código (php) [Seleccionar]

$counterTickets  = 0;
$counterRisk     = 0;
$counterWinLoss  = 0;
$IdGames         = "";
 while($dataGames = $strDataGames->fetch(PDO::FETCH_ASSOC)){
   if (isset($anterior) ){
// Si hay un aterior trabajamos con el. Esto se hace ciempre.
  $counterTickets      += $anterior['Tickets'];
  $counterRisk         += $anterior['Risk'];
  $counterWinLoss      += $anterior['WinLoss'];
  $IdGames             .= $anterior['IdGame']."+";    
// Verificamos la similitud con el anterior. Si coinciden hago lo que quiero.
if(($dataGames['NumGame']  == $anterior['NumGame']) && ($dataGames['Teams'] == $anterior['Teams'])){
  if(strtotime($anterior['Time']) < strtotime($dataGames['Time']))
      $anterior['Time'] = $dataGames['Time'];
             
   $anterior['Score']   =  $dataGames['Score'];
 
 }else{  
$todayFigure += $counterWinLoss;
$response .= "<tr>
<td>$anterior[Time]</td>
<td>$anterior[NumGame]</td>
<td>$anterior[Teams]</td>
<td>$anterior[Score]</td>
<td><a href=\"#\" onClick=\"openInfoWager(this);\">$counterTickets</a></td>
<td>$counterRisk</td>
<td>$counterWinLoss</td>
<td>$todayFigure</td>
    </tr>";
  // Borrar el anterior.
  unset($anterior);
  }      
}

// Si hay un aterior trabajamos con el. Esto se hace ciempre.
if ( !isset($anterior) ){
// Preparar las variables para la proxima ronda.
$counterTickets     = 0;
$counterRisk        = 0;
$counterWinLoss     = 0;
$IdGames            = "";
$anterior           = $dataGames;
}
}//end while

sexto

No estoy seguro porque la tabulación puede engañar un poco (culpa de los copiar/pegar, no tuya).
Pero creo que al hacer por primera vez el While no hace nada del primer If y lo único que hace es poner los contadores a 0 y dar valor a las variables IdGames (texto vacío) y Anterior (row anterior, obviamente).
Y luego trabajas siempre con $anterior. Lo que significa (creo) que cuando llegue a la última row de la consulta, le dará esos valores a $anterior, pero NO volverá a entrar en el While, por lo que esos datos se quedarán en el aire...
No sé si me explico.

Por cierto, para hacer más legible el código, pon =php en la etiqueta code, es decir:

[code=php]....

[/code]

adryan310

Amigo modifique mi codigo, ahora lo tengo asi, pero igual no me suma lo que debe de sumar  :-(
Código (php) [Seleccionar]

function showFila(&$response, $anterior, $counterTickets, $counterRisk, $counterWinLoss, $todayFigure){
                      $response .= "<tr>
                                     <td>$anterior[Time]</td>
                                     <td>$anterior[NumGame]</td>
                                     <td>$anterior[Teams]</td>
                                     <td>$anterior[Score]</td>
                                     <td><a href=\"#\" onClick=\"openInfoWager(this);\">$counterTickets</a></td>
                                     <td>$counterRisk</td>
                                     <td>$counterWinLoss</td>
                                     <td>$todayFigure</td>
                                   </tr>";
    }
// Variable
    $estado = (bool) ($dataGames = $strDataGames->fetch(PDO::FETCH_ASSOC));
// El while
    while($estado){
        if ( isset($anterior) ){
            // Si hay un aterior trabajamos con el. Esto se hace ciempre.
           $counterTickets      += $anterior['Tickets'];
           $counterRisk         += $anterior['Risk'];
           $counterWinLoss      += $anterior['WinLoss'];
           $IdGames             .= $anterior['IdGame']."+";     
       
            // Verificamos la similitud con el anterior. Si coinciden hago lo que quiero.
            if(($dataGames['NumGame']  == $anterior['NumGame']) && ($dataGames['Teams'] == $anterior['Teams'])){
               if(strtotime($anterior['Time']) < strtotime($dataGames['Time']))
                  $anterior['Time']    = $dataGames['Time'];
     
                  $anterior['Score']   =  $dataGames['Score'];
            }
            else{   
                  $todayFigure += $counterWinLoss;
                  // ahora se usa la funcion
                  showFila($response, $anterior, $counterTickets, $counterRisk, $counterWinLoss, $todayFigure);
                       
                  // Borrar el anterior.
                  unset($anterior);
                }       
        }
       
        if ( !isset($anterior) ){
            // Preparar las variables para la proxima ronda.
            $counterTickets     = 0;
            $counterRisk        = 0;
            $counterWinLoss     = 0;
            $IdGames            = "";
            $anterior           = $dataGames;
        }
       
        // Si es el ultimo.
        if(!($estado = (bool) ($dataGames = $strDataGames->fetch(PDO::FETCH_ASSOC))))
                showFila($response, $anterior, $counterTickets, $counterRisk, $counterWinLoss, $todayFigure);
}// end while.