Foros del Web » Programando para Internet » PHP »

resultado paginación

Estas en el tema de resultado paginación en el foro de PHP en Foros del Web. Hola colegas, bueno estoy haciendo una paginación en base a un tutorial... y tengo 2 dudas al respecto... aqui les pongo mi código que es ...
  #1 (permalink)  
Antiguo 20/01/2010, 10:30
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 3 meses
Puntos: 9
resultado paginación

Hola colegas, bueno estoy haciendo una paginación en base a un tutorial... y tengo 2 dudas al respecto... aqui les pongo mi código que es un poco largo:

Código PHP:

<?php
//....

switch ($parametro) {
    case (
$parametro 4):
        
$sql=sprintf("SELECT DISTINCT a.id,titulo, descripcion, autor, MATCH (titulo,descripcion,autor) AGAINST ('%s' IN BOOLEAN MODE ) AS puntuacion FROM separata a INNER JOIN tags b ON a.id=b.id WHERE MATCH (titulo,descripcion,autor) AGAINST ('%s' IN BOOLEAN MODE) OR MATCH (tags_descripcion) AGAINST ('%s' IN BOOLEAN MODE) ORDER BY puntuacion DESC "mysql_real_escape_string(stripslashes('%'.$busqueda.'%')), mysql_real_escape_string(stripslashes('%'.$busqueda.'%')), mysql_real_escape_string(stripslashes('%'.$busqueda.'%')));
        
$rs=mysql_query($sql,$c) or die (mysql_error());
        
$n=mysql_num_rows($rs);
        break;
    case (
$parametro == 4):
        
$sql=sprintf("SELECT DISTINCT a.id,titulo, descripcion, autor FROM separata a INNER JOIN tags b ON a.id=b.id WHERE titulo LIKE '%s' OR descripcion LIKE '%s' OR autor LIKE '%s' OR tags_descripcion LIKE '%s'"mysql_real_escape_string(stripslashes('%'.$busqueda.'%')), mysql_real_escape_string(stripslashes('%'.$busqueda.'%')), mysql_real_escape_string(stripslashes('%'.$busqueda.'%')), mysql_real_escape_string(stripslashes('%'.$busqueda.'%')));
        
$rs=mysql_query($sql,$c) or die (mysql_error());
        
$n=mysql_num_rows($rs);
        break;
    default:
        
$n=0;
        break;
}


if(
$n>0){

//DEFINICION DE VARIABLES DE LA PAGINACION
//////////calculo de elementos necesarios para paginacion 
//tamaño de la pagina 
$tamPag=6;
//pagina actual si no esta definida y limites 
if(!isset($_GET["pagina"])) 

   
$pagina=1
   
$inicio=1
   
$final=$tamPag
}else{ 
   
$pagina $_GET["pagina"]; 

//calculo del limite inferior 
$limitInf=($pagina-1)*$tamPag

//calculo del numero de paginas 
$numPags=ceil($n/$tamPag); 
if(!isset(
$pagina)) 

   
$pagina=1
   
$inicio=1
   
$final=$tamPag
}else{ 
   
$seccionActual=intval(($pagina-1)/$tamPag); 
   
$inicio=($seccionActual*$tamPag)+1

   if(
$pagina<$numPags
   { 
      
$final=$inicio+$tamPag-1
   }else{ 
      
$final=$numPags
   } 

   if (
$final>$numPags){ 
      
$final=$numPags
   } 


//////////fin de dicho calculo

switch ($parametro) {
    case (
$parametro 4):
        
$sql=sprintf("SELECT DISTINCT a.id,titulo, descripcion, autor, MATCH (titulo,descripcion,autor) AGAINST ('%s' IN BOOLEAN MODE ) AS puntuacion FROM separata a INNER JOIN tags b ON a.id=b.id WHERE MATCH (titulo,descripcion,autor) AGAINST ('%s' IN BOOLEAN MODE) OR MATCH (tags_descripcion) AGAINST ('%s' IN BOOLEAN MODE) ORDER BY puntuacion DESC LIMIT ".$limitInf.",".$tamPagmysql_real_escape_string(stripslashes('%'.$busqueda.'%')), mysql_real_escape_string(stripslashes('%'.$busqueda.'%')), mysql_real_escape_string(stripslashes('%'.$busqueda.'%')));
        
$rs=mysql_query($sql,$c) or die (mysql_error());
        
$n=mysql_num_rows($rs);
        break;
    case (
$parametro == 4):
        
$sql=sprintf("SELECT DISTINCT a.id,titulo, descripcion, autor FROM separata a INNER JOIN tags b ON a.id=b.id WHERE titulo LIKE '%s' OR descripcion LIKE '%s' OR autor LIKE '%s' OR tags_descripcion LIKE '%s' LIMIT ".$limitInf.",".$tamPagmysql_real_escape_string(stripslashes('%'.$busqueda.'%')), mysql_real_escape_string(stripslashes('%'.$busqueda.'%')), mysql_real_escape_string(stripslashes('%'.$busqueda.'%')), mysql_real_escape_string(stripslashes('%'.$busqueda.'%')));
        
$rs=mysql_query($sql,$c) or die (mysql_error());
        
$n=mysql_num_rows($rs);
        break;
    default:
        
$n=0;
        break;
}

    while(
$row mysql_fetch_array($rs)){
    
//datos de bd....
?>    
/*RESULTADO*/
<?php
}
?>
    <div id="paginador">
<?php
//////////inicio de la paginacion 
if($pagina>1

echo 
"<a href='".$_SERVER["PHP_SELF"]."?pagina=".($pagina-1)."&WebSearch=".$busqueda."' class='eBreadCrumb'>"
echo 
"<font face='verdana' size='-2'>anterior</font>"
echo 
"</a> "


for(
$i=$inicio;$i<=$final;$i++) 

if(
$i==$pagina

  echo 
"<font face='verdana' size='-2'><b>".$i."</b> </font>"
}else{ 
  echo 
"<a href='".$_SERVER["PHP_SELF"]."?pagina=".$i."&WebSearch=".$busqueda."' class='eBreadCrumb'>"
  echo 
"<font face='verdana' size='-2'>".$i."</font></a> "


if(
$pagina<$numPags

echo 
" <a href='".$_SERVER["PHP_SELF"]."?pagina=".($pagina+1)."&WebSearch=".$busqueda."' class='eBreadCrumb'>"
echo 
"<font face='verdana' size='-2'>siguiente</font></a>"

//////////fin de la paginacion 
?>
</div>
El primero es que como me puedo ahorrar al repetir 2 veces el query ... uno para sacar el número de resultados de la búsqueda y el otro para definir el LIMIT de resultados para crear el número de páginas.

Y el segundo es un problema en el primer query. Hago una busqueda fulltext o like dependiendo del tamaño de la cadena. En el caso de fulltext, cuando paso a la segunda pagina del paginador se me repite el ultimo registro de la pagina 1 con el primer registro de la pagina 2... y siempre falta un registro por ahi. En el caso de la busqueda like funciona normal... tiene que ver algo el cálculo de las paginas??
__________________
Quitenme la vida pero no la bebida.
  #2 (permalink)  
Antiguo 20/01/2010, 10:46
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 5 meses
Puntos: 175
Respuesta: resultado paginación

Tal vez pueda ayudarte, pero te pediria que me expliques y a los demas, porque deberias tener 2 tipos de QUERYS.. o cual es el fin de esto?
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #3 (permalink)  
Antiguo 20/01/2010, 11:24
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 3 meses
Puntos: 9
Respuesta: resultado paginación

porque el fulltext busca a partir de 5 caracteres ... por ejemplo si escribo "guia" y solo aplico el fulltext, no encuentra nada... pero con LIKE si ... por eso pregunto si la cadena a buscar tiene más de 4 caracteres y en otro caso si tiene igual a 4 caracteres.
__________________
Quitenme la vida pero no la bebida.

Etiquetas: resultados
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:03.