Ver Mensaje Individual
  #5 (permalink)  
Antiguo 16/12/2005, 12:26
Avatar de pablod
pablod
 
Fecha de Ingreso: abril-2004
Ubicación: Santiago
Mensajes: 118
Antigüedad: 20 años
Puntos: 0
OK. Acá dejo la paginación que realice con PHP y SQL Server.

Primero el procedimiento almacenado.
Código:
--SP QUE RETORNA UNA CONSULTA PAGINADA
--RECIBE PARAMETROS PARA LA PAGINACION

CREATE PROCEDURE paginacion_ejemplo
--NUMERO DE PAGINA A MOSTRAR
@index int,
--TOTAL DE REGISTROS POR PAGINA
@num_regs int

AS
    
    BEGIN

        --ESTOS SERNA LOS INDICES PARA LA PAGINACION
		DECLARE @maximo numeric
        DECLARE @minimo numeric

        SELECT @maximo = (@index * @num_regs)
        SELECT @minimo = @maximo - (@num_regs - 1)

        --CREACION DE LA TABLA TEMPORAL PARA LA PAGINACION
        --NUM_ORDEN SERVIRA DE INDICE PARA EXTRAER LOS REGISTROS

        CREATE TABLE #tmpListado(
            num_orden int IDENTITY(1,1),
            id_radio int,
            nombre_radio varchar(15)
        )

        --INSERTAR LOS DATOS A LA TABLA TEMPORAL DIRECTAMENTE DESDE EL SELECT
        INSERT #tmpListado SELECT id_radio, nombre_radio FROM tb_adm_radio ORDER BY nombre_radio

        --UNA VEZ CARGADOS LOS DATOS LOS EXTRAEMOS
        --CON UN SELECT FILTRADO POR LOS VALORES DE LA PAGINACION
        SELECT id_radio, nombre_radio 
        FROM #tmpListado
        WHERE num_orden BETWEEN @minimo AND @maximo

    END
--FIN--
Y aqui va la parte en PHP

Código PHP:
<?php
include("includes/abrir_conexion_db.php");

//COSTANTES PARA EL DESPLIEGUE DE RESULTADOS
define("LIMITE"3);
define("TAM_VENTANA"10);

//CALCULO EL NUMERO DE REGISTROS
$total 0;
//PROCEDIMIENTO ALMACENADO QUE DETERMINA EL NUMERO DE REGISTROS
$sql_sel mssql_init("sp_selecciona_registros"); 
$res_sel mssql_execute($sql_sel) ;
$row mssql_fetch_array($res_sel);
$total += mssql_num_rows($res_sel);
//NUMERO TOTAL DE REGISTROS
$numero_de_registros $total;

?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Paginación PHP - SQL Server</title>
<style type="text/css">
<!--
.titulo{
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-weight: bold;
}
.texto
    {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; }

-->
</style>
</head>

<body>
<p class="titulo">Paginaci&oacute;n de Resultados PHP - SQL Server 2000 </p>
<span class="Estilo2">Número total de registros: <?php echo $numero_de_registros ?></span><br>
<span class="Estilo2">Número de registros por página: <?php echo LIMITE ?></span><br><br>

<table width="50%" border="0" cellspacing="2" cellpadding="2">
  <tr>
    <td bgcolor="#CCCCCC">ID RADIO</td>
    <td bgcolor="#CCCCCC">NOMBRE RADIO</td>
  </tr>
  <?php
    
    $pagina 
$_GET['pagina'];
    
$limite LIMITE;
    if( isset( 
$pagina ) ) {
    }
    else {
        
$pagina 1;
    }
    
    
//LLAMAR AL SP QUE EXTRAE LOS DATOS PAGINADOS
    
$sql_sel2 mssql_init("paginacion_ejemplo");
    
//ENVIAR PARAMETROS AL SP
    
mssql_bind($sql_sel2"@index"$paginaSQLINT2);
    
mssql_bind($sql_sel2"@num_regs"$limiteSQLINT2);
    
$res_sel2 mssql_execute($sql_sel2);
    
$num_rows_sel2 mssql_num_rows($res_sel2);
    
    
$num_paginas_float $numero_de_registros $limite//número total de páginas a mostrar (float)
    
$valor_redondeado ceil($num_paginas_float); //número total de páginas a mostrar (entero)
    
$inferior $pagina - ( ceilTAM_VENTANA ) );
    
$inicio_ventana 1;
    if( 
$valor_redondeado TAM_VENTANA ) {
        
$inicio_ventana = ( $inferior ) ? $inferior 1;
    }
    
$fin_ventana $inicio_ventana + ( TAM_VENTANA );
    if( ( 
$fin_ventana $valor_redondeado ) && ( $valor_redondeado TAM_VENTANA ) ) {
        
$inicio_ventana $valor_redondeado - ( TAM_VENTANA );
    }
    
$contador $inicio_ventana;
    
    if( 
$num_rows_sel2 ) {    
    
        while( 
$row_sel2 mssql_fetch_array($res_sel2) ) {
  
?>
          <tr>
            <td bgcolor="#FFFFF0"><?php echo $row_sel2['id_radio'?></td>
            <td bgcolor="#FFFFF0"><?php echo $row_sel2['nombre_radio'?></td>
          </tr>
  <?php
        
}
    }
    
?>
</table>
<br>
<table width="50%"  border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="10%" align="left">
        <?php
        
if( $pagina ) {
            
$numero_pagina $pagina 1;
        
?>
                <a href="paginacion_prueba.php?pagina=<?php echo $numero_pagina ?>">&laquo;&nbsp;Anterior</a>
            <?php
        
}
        else{                
        
?>
            &nbsp;
        <?php
        
}
        
?>
    </td>
    <td width="30%" align="center">
    <?php
    
if( ( $numero_de_registros ) && ( $valor_redondeado ) ) {
        
$nuevo_inicio = ($inicio_ventana $limite) - $limite;
        while ( ( 
$contador <= $valor_redondeado ) && ( $contador <= $fin_ventana) ) {
            
$string_contador "";
            if( 
$contador $inicio_ventana ) {
                
$nuevo_inicio += $limite;
            }
            if( 
$pagina == $contador ) {
                
$string_contador "<b>$contador</b>";
            }
            else {
                
$string_contador "$contador";
            }
            if( ( 
$pagina $contador ) || ( $pagina $contador ) ) {
            
?>
                &nbsp;<a href="paginacion_prueba.php?pagina=<?php echo $contador ?>"><?php echo $string_contador ?></a>&nbsp;<?php
            
}
            else {
                echo 
"&nbsp;" $string_contador "&nbsp;";
            }
            
$contador++;
        }
    }
    
?>
    </td>
    <td width="10%" align="right">
    <?php 
        
if( $pagina $valor_redondeado ) {
            
$numero_pagina $pagina 1;
        
?>
            <a href="paginacion_prueba.php?pagina=<?php echo $numero_pagina ?>">Siguiente&nbsp;&raquo;</a><?php
        
}
        else{                
        
?>
            &nbsp;
        <?php
        
}
    
?>
    </td>
  </tr>
</table>

</body>
</html>
Eso sería, si alguien refina el código no duden en enviar y postear la información.

Saludos.

P4blo.-
__________________
Pablod:-)