Ver Mensaje Individual
  #2 (permalink)  
Antiguo 27/09/2005, 17:51
dogui_jcas
 
Fecha de Ingreso: febrero-2005
Mensajes: 8
Antigüedad: 19 años, 2 meses
Puntos: 0
Paginacion sql server

Hola

Estoy en el mismo dilema que tu, pero creo que tengo una nocion o idea para la solucion espero que te sirva bastante, este codigo esta sacado del phpbb por si te funciona, me avisas ok?

Código PHP:
<? //para indicar donde esta la pagina inicial de la paginacion
$start = ( isset($HTTP_GET_VARS['start']) ) ? intval($HTTP_GET_VARS['start']) : 0;
$start 1;
// arreglo para guardar los datos requeridos en la consulta 
$topic_rowset = array();
//parametro para saber cuantos registros debemos mostrar en cada pagina
$topics_per_page=10;
// la consulta debe ser similar a mysql
$query "SELECT idforo, nombreforo, tipoforo, descripcionforo FROM  foro WHERE estado = 'A' AND tipoforo = 2 ORDER BY idforo asc LIMIT ".$start.", ".$topics_per_page;
// de esta condicion sacamos los valores de limit por medio de expresiones regulares
    
if( preg_match('#^SELECT(.*?)(LIMIT ([0-9]+)[, ]*([0-9]+)*)?$#s'$query$limits) )
            {
                
//oobtenemos la primera parte del query hasta el Limit
                
$query $limits[1];
//preguntamo sobre la existencia de la cadena LIMIT
                
if( !empty($limits[2]) )
                {
                
// sacamos el numero inicial de fila
                    
$row_offset = ( $limits[4] ) ? $limits[3] : "";
                    
//numero de filas a mostrar
                    
$num_rows = ( $limits[4] ) ? $limits[4] : $limits[3];
                
// adicionamos el Select top para que nos saque los n primeros registros
                    
$query "SELECT TOP " . ( $row_offset $num_rows ) . $query;
                }
            }
//ejecutamos la consulta
                
$result1 mssql_query($query);

            if( 
$row_offset )
                    {
                        
//nos posesionamos sobre la fila que empezaremos a mostrar
                        
mssql_data_seek($result1$row_offset);
                        
                    }        
/// indica el numero total de los registros que mostraremos 
$total_topics 0;
//cargamos el arreglo envase a las consulta, aqui siempre toma a partir del $row_offset hacia adelante
while( $row1 mssql_fetch_array($result1))
{

    
$topic_rowset[] = $row1;
    
$total_topics++;

    
}
//desplegamos de la siguiente manera en nuestra pagina
echo     echo " <table>";
    for(
$i 0$i $total_topics$i++)
    {
        echo 
"<tr><td>";
        echo 
$topic_rowset[$i]['idforo'];
        echo 
"</tr></td>";
    }
echo 
"</table>";



//funcion para generar la barra de navegacion 
function generate_pagination($base_url$num_items$per_page$start_item$add_prevnext_text TRUE)
{
    global 
$lang;

    
$total_pages ceil($num_items/$per_page);

    if ( 
$total_pages == )
    {
        return 
'';
    }

    
$on_page floor($start_item $per_page) + 1;

    
$page_string '';
    if ( 
$total_pages 10 )
    {
        
$init_page_max = ( $total_pages ) ? $total_pages;

        for(
$i 1$i $init_page_max 1$i++)
        {
            
$page_string .= ( $i == $on_page ) ? '<b>' $i '</b>' '<a href="' append_sid($base_url "&amp;start=" . ( ( $i ) * $per_page ) ) . '">' $i '</a>';
            if ( 
$i <  $init_page_max )
            {
                
$page_string .= ", ";
            }
        }

        if ( 
$total_pages )
        {
            if ( 
$on_page 1  && $on_page $total_pages )
            {
                
$page_string .= ( $on_page ) ? ' ... ' ', ';

                
$init_page_min = ( $on_page ) ? $on_page 5;
                
$init_page_max = ( $on_page $total_pages ) ? $on_page $total_pages 4;

                for(
$i $init_page_min 1$i $init_page_max 2$i++)
                {
                    
$page_string .= ($i == $on_page) ? '<b>' $i '</b>' '<a href="' append_sid($base_url "&amp;start=" . ( ( $i ) * $per_page ) ) . '">' $i '</a>';
                    if ( 
$i <  $init_page_max )
                    {
                        
$page_string .= ', ';
                    }
                }

                
$page_string .= ( $on_page $total_pages ) ? ' ... ' ', ';
            }
            else
            {
                
$page_string .= ' ... ';
            }

            for(
$i $total_pages 2$i $total_pages 1$i++)
            {
                
$page_string .= ( $i == $on_page ) ? '<b>' $i '</b>'  '<a href="' append_sid($base_url "&amp;start=" . ( ( $i ) * $per_page ) ) . '">' $i '</a>';
                if( 
$i <  $total_pages )
                {
                    
$page_string .= ", ";
                }
            }
        }
    }
    else
    {
        for(
$i 1$i $total_pages 1$i++)
        {
            
$page_string .= ( $i == $on_page ) ? '<b>' $i '</b>' '<a href="' append_sid($base_url "&amp;start=" . ( ( $i ) * $per_page ) ) . '">' $i '</a>';
            if ( 
$i <  $total_pages )
            {
                
$page_string .= ', ';
            }
        }
    }

    if ( 
$add_prevnext_text )
    {
        if ( 
$on_page )
        {
            
$page_string ' <a href="' append_sid($base_url "&amp;start=" . ( ( $on_page ) * $per_page ) ) . '">' $lang['Previous'] . '</a>&nbsp;&nbsp;' $page_string;
        }

        if ( 
$on_page $total_pages )
        {
            
$page_string .= '&nbsp;&nbsp;<a href="' append_sid($base_url "&amp;start=" . ( $on_page $per_page ) ) . '">' $lang['Next'] . '</a>';
        }

    }

    
$page_string $lang['Goto_page'] . ' ' $page_string;

    return 
$page_string;
}

?>

atte JULIO