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.",".$tamPag, 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' LIMIT ".$limitInf.",".$tamPag, 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;
}
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>
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??