Tienes que revisar un poco el codigo y debuggerarlo tu mismo, no esperes que los demas te hagamos el trabajo.
Si razonas el funcionamiento de un
corte de control veras que no debes trabajar directamente con el ultimo registro a mostrar, sino con el anterior, y es precisamente sobre este que debes tener que poner controles. Cambiando un poco la logica de los if (para mayor claridad) quedaria asi:
Código PHP:
Ver original<?php
while($dataGames = $strDataGames->fetch(PDO::FETCH_ASSOC))
{
{
// 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'])
)
{
$anterior['Time'] = $dataGames['Time'];
$anterior['Score'] = $dataGames['Score'];
}
else
{
$todayFigure += $counterWinLoss; // Resto cuando el usuario perdio.
$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.
}
}
// Si hay un aterior trabajamos con el. Esto se hace ciempre.
{
// Preparar las variables para la proxima ronda.
$counterTickets = 0;
$counterRisk = 0;
$counterWinLoss = 0;
$IdGames = "";
$anterior = $dataGames;
}
}
El algoritmo tiene 2 grandes bugs. El primero se soluciono (no lo hice intencionalmente) al cambiar la estructura de los if, que es cuando un hay un solo numGame o un solo numTeam.
El otro bug que vas a solucionar tu solo, es cuando el ultimo registro pertenece a un nuevo numTeam o numGame. Este algoritmo lo guardaria como anterior, pero nunca lo procesaria.
Pista 1 (Solucion elegante): Se puede solucionar dentro del while agregando 2 variables booleanas. Una de ella pasara a ser la condicion del while y debe ser inicializada correctamente la primera vez. Para esta solucion basta agregar 5 lineas al final del while, una unica antes de que se inicie, y modificar la condicion del while por la variable booleana que agregaste en la linea anterior.
+ Claro
+ Simple
+ Consistente
+ Portable
+/- Escalable
Pista 2: (Solucion mediocre): No tocar el while, agregar un if luego de este para ver si se trata de este caso, preguntando si esta o no.
- Claro
++ Simple
- Cosistente
+/- Portable
-- Escalable
Pista 3: (Solucion elegante, escalable, perfeccionista): Es un destilado de la primer solucion, la diferencia es que aqui no usaras 2 variables booleanas sino una sola, y una funcion axuliar para mostrar los datos. La primer linea y la condicion del while se cambian igual que en la primera, el echo de la fila de la tabla se mete en una funcion auxiliar que recibe por parametro las variables, donde esta el echo se remplaza por una llamada a la funcion, y, dentro de el bloque que pregunta si el $anterior no esta seteado, se agregan 2 lineas mas, un if que pregunta por la variable booleana, si es falso, llama a la funcion de mostrar.
+ Claro
+/- Simple
++ Consistente
+/- Portable (Hay dependencia de una funcion auxiliar.)
++ Escalable
Pista 4 (Solucion profesional): Sin duda la mejor de todas. Modificar la consulta SQL para que haga todo esto y hacer un while simple que muestre los resultados obtenidos.
Pistas N: Puedes hacer cualquier hibrido que se te ocurra entre estas tres opciones.
No te voy a poner codigo, piensa y razona tu, en el peor de los casos, son 10 lineas de codigo que hay que agregar y en el mejor 5. Tu puedes.