Ver Mensaje Individual
  #4 (permalink)  
Antiguo 11/07/2005, 00:26
Avatar de jpinedo
jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Vaya... tienes razón.
El LIMIT limita (valga la redundancia) el número de registros devuelto por la consulta, peor no limita los registros tomados por las funciones como SUM().

En este caso parece que lo que habrá que hacer es obtener el "id" del primer registro de cada página y repetir la consulta que te puse, sin el LIMIT y con un AND id<$primer_id.

En este caso no sé realmente si el id nos sirva, ya que estamos ordenando por timestamp. Voy a ponerte un ejemplo de cómo se haría con el timestamp. Pero si dos registros pudieran tener el mismo valor en este campo, elcódigo podría no funcionar correctamente.

Si el id de tus registros es entero auto-incremental y se corresponde en orden con el timestamp (o sea, si los orednas por id, también quedan ordenados por timestamp), mejor tomamos en lugar del timestamp, el id y se soluciona.
Código PHP:
// TODO LO ANTERIOR A ESTA LÍNEA PERMANECE IGUAL

$_pagi_sql "SELECT trans_fee AS FEE, 
                    timestamp AS DATETIME, 
                    status AS STATUS 
                FROM transactions 
                WHERE timestamp >= $convert1 
                    AND timestamp<=$convert2 
                    AND trans_fee>0 
                ORDER BY timestamp DESC"


//Incluimos el script de paginación. Éste ya ejecuta la consulta
include("paginator.inc.php");

// Leemos el timestamp del primer registro
$row_suma mysql_fetch_assoc($_pagi_result);
$timestamp_primer_registro $row_suma['DATETIME'];
// resetaemos el resultset
mysql_data_seek($_pagi_result0);


// Vamos a calcular la variable $fee_acumulado.
//----------------------------------------------------------
if($_pagi_actual == 1){
    
// Si la página es la número 1, $fee_acumulado = 0.
    
$fee_acumulado 0;
}else{
    
// Si la página no es la primera, hay que sumar los "fee" de los registros anteriores, $fee_acumulado = 0.
    
$sql_suma "SELECT SUM(trans_fee) AS SUM_FEE
                    FROM transactions
                    WHERE timestamp >= $convert1
                        AND timestamp <= $convert2
                        AND trans_fee > 0
                        AND timestamp > '$timestamp_primer_registro'"
// Se suman desde el primer registro hasta el últimio de la página anterior
    
$result_suma mysql_query($sql_suma) or die ("Error en la suma :: <b>$sql_suma</b> :: ".mysql_error());
    
$row_suma mysql_fetch_assoc($result_suma);
    
$fee_acumulado $row_suma['SUM_FEE'];
}
//---------------------------------------------------------

if ($rowmysql_fetch_array($_pagi_result)){
    
$fee $row['FEE'];
    
$status $row['STATUS'];
    
$i 0;
    
$buffer  $fee_acumulado// Aquí inicializamos el $buffer de manera distinta.
    
    /* Impresion de resultados en HTML */

// TODO LO POSTERIOR A ESTA LÍNEA PERMANECE IGUAL 
Saludos