Foros del Web » Programando para Internet » PHP »

paginar por orden alfabetico

Estas en el tema de paginar por orden alfabetico en el foro de PHP en Foros del Web. Hola a todos!!! Soy una novatilla en el php...pero hago mis cositas... Bueno al grano, tengo un problema al querer paginar los resultados de una ...
  #1 (permalink)  
Antiguo 29/02/2008, 07:17
 
Fecha de Ingreso: febrero-2008
Ubicación: Bergara
Mensajes: 12
Antigüedad: 16 años, 2 meses
Puntos: 0
paginar por orden alfabetico

Hola a todos!!!
Soy una novatilla en el php...pero hago mis cositas...
Bueno al grano, tengo un problema al querer paginar los resultados de una consulta MYSQL.
Yo se paginar o al menos tengo un código que me funciona, pero ahora quiero que en vez de enumerarme las páginas me salga el alfabeto para poder pinchar en alguna letra he ir a los resultados que empiezan por esa letra.
No se como hacerlo, pero me sería muy útil que alguien me ayudase por favor.

Muchas gracias de antemano.



Irene.
  #2 (permalink)  
Antiguo 29/02/2008, 08:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: paginar por orden alfabetico

Lo que haces es filtrar por letra, es fácil si haces un query de este tipo:
Código:
SELECT * FROM tabla WHERE campo LIKE 'A%'
Luego para sacar todas las letras haces algo así:
Código PHP:
foreach( range'a''z' ) as $letra ) {
          echo 
"<a href=\"pagina.php?letra=$letra\">$letra</a>|";

Así rescatas en $_GET['letra'] la letra actual.

Traslado tu tema al foro de PHP General.

Saludos.
  #3 (permalink)  
Antiguo 10/03/2008, 02:14
 
Fecha de Ingreso: febrero-2008
Ubicación: Bergara
Mensajes: 12
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: paginar por orden alfabetico

Muchas gracias!!!
Lo voy a intentar...con lo que sea si no me sale te cuento.
Muchisimas gracias!!!!
Besitos
  #4 (permalink)  
Antiguo 10/03/2008, 02:58
 
Fecha de Ingreso: agosto-2004
Ubicación: Lugo
Mensajes: 15
Antigüedad: 19 años, 8 meses
Puntos: 0
Re: paginar por orden alfabetico

Te sugiero que cambies la consulta mysql y ponla asi
Ascendente
Cita:
SELECT * FROM tabla WHERE campo LIKE 'A%' order by CAMPO ASC
Descendente
Cita:
SELECT * FROM tabla WHERE campo LIKE 'A%' order by CAMPO DESC
Sustituye campo por el nombre de la fila que quieres ordenar por ejemplo nombre

Cita:
SELECT * FROM tabla WHERE campo LIKE 'A%' order by nombre ASC
  #5 (permalink)  
Antiguo 10/03/2008, 04:58
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Re: paginar por orden alfabetico

hola, he leido el post y por no duplicar tema pregunto aqui,

he intentado hacer lo que decis arriba pero me sale bien todas las letras en la pagina, pero solo salen los resultados de la A, despues cuando le doy a alguna letra para que me muestre los resultados de la letra M por ejemplo, siempre me muestra la primera pagina que sale, la de la letra A,

alguien sabe donde meto la pata? Gracias.


Código PHP:
$_pagi_sql "SELECT * FROM archivos  WHERE name LIKE 'A%' order by name ASC";  
$_pagi_result mysql_query($_pagi_sql $conexion) or die ( mysql_error() );  
 
echo 
"<table width=65%><tr style='border:1px solid #009900' ><div align=center>";
if (
$_pagi_result == NULL){
        echo 
"No hay resultados por esa letra";
  }  else {       
         foreach( 
range'a''z' ) as $letra ) {
          
 echo 
"<a href=\"listar_archivos_ordenalf.php?letra=$letra\">$letra</a>|";



 }
}


echo 
"</div></tr>";    

echo 
"</table>" ;
while(
$row mysql_fetch_array($_pagi_result)){
$size=$row[size];
 



echo 
"<table width=65%><tr bgcolor= #61e877><div align=center>";

echo 
"<b>Titulo: </b>";
echo 
$row[name];
echo 
"</div></tr>";
echo
"<tr>&nbsp;</tr>";
echo 
"<tr bgcolor= #c3c3c3><b> &nbsp;&nbsp;&nbsp;Descripcion: </b><br><br>";

echo 
$row[description];
echo 
"</tr>";

echo
"<tr bgcolor= #c3c3c3 >&nbsp;</tr>";
echo 
"<tr bgcolor= #c3c3c3><b> &nbsp;&nbsp;&nbsp;Tamaño: </b>";




echo 
tamano_humano($size $precision )." ";
 
echo 
"</tr>";


echo
"<tr bgcolor= #c3c3c3>&nbsp;</tr>";

echo 
"<tr bgcolor= #c3c3c3><div align=center><a href=\"descargar.php?ruta=archivos/$row[ruta]\">Descargar</a></div>"
//echo "<tr bgcolor= #cccccc><div align=center><a href=archivos/$row[ruta]>Descargar</a></div>";


echo "</table>" ;


estan paginados los resultados con el PAGINATOR de jpinedo, pero esa parte del codigo no la he puesto para no sobrecargar,
Gracias.
  #6 (permalink)  
Antiguo 12/03/2008, 02:35
 
Fecha de Ingreso: febrero-2008
Ubicación: Bergara
Mensajes: 12
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: paginar por orden alfabetico

AL FINAL NO SE COMO HACERLO!!
Soy un desastre....
Mirar mi codigo, yo hago esto para paginar y me funciona pero queria algo para cambiar esto y que me salga paginar por letras.
aver como os paso el codigo para que me ayudeis.

es para controlar el inventario de un almacen y poder mirar cuanto queda del articulo , pinchando en la letra listara los articulos según la letra.

tengo un archivo que es funciones.php que contiene:

function posicionpagina($actual,$totalregistros,$cantidad){
$totalpaginas=ceil($totalregistros/$cantidad);
$texto='<div align="right"><h4>Pagina '.$actual.' de '.$totalpaginas.'</h4></div>';
return $texto;
}


function paginar($actual,$total,$por_pagina,$enlace){
$texto="";
$total_paginas=ceil($total/$por_pagina);//para redondear
$anterior=$actual-1;
$posterior=$actual +1;
if($actual>1){
$texto="<a href=\"$enlace$anterior\">&laquo; anterior </a>";
}
for($i=1;$i<=$total_paginas;$i++){
if($i!=$actual){
$texto.=" [<a href=\"$enlace$i\">$i</a>]";//a esto se le puede poner corchetes o lo que sea segun kieras mostras tu los resultados [1] [2] [3] [4]
}else{
$texto.=$i;
}
}//cierre del for
if($actual<$total_paginas){
$texto.="<a href=\"$enlace$posterior\"> posterior&raquo;</a>";

}
return $texto;
}

y luego en mi pagina pongo todo esto, y me pagina bien pero por números de paginas....

//---------------------CONSULTA----------------------
$sql="SELECT inventario.*, articulos.cod_articulo, articulos.nombre, articulos.descripcion_articulo FROM inventario, articulos WHERE (inventario.cod_articulo=articulos.cod_articulo) AND inventario.cantidad > 0 GROUP BY inventario.cod_articulo ORDER BY inventario.cod_articulo ASC, inventario.tipo_usuario ASC";
//-------------------EJECUCION DE LA CONSULTA-----------------
$resultado=mysql_query($sql);
$totalregistros=mysql_num_rows($resultado);
$cantidad_pag=2;
$registro_inicio=($pag-1)*$cantidad_pag;
$sql.=" LIMIT $registro_inicio,$cantidad_pag";
$resultado=mysql_query($sql);
if($resultado){
echo posicionpagina($pag,$totalregistros,$cantidad_pag) ;
echo '<table border="1" cellpadding="5" cellspacing="5" width="100%">
<caption>
Stock de los art&iacute;culos
</caption>
<tr>
<td><h4>Nombre del art&iacute;culo </h4></td>
<td><h4>Descripci&oacute;n</h4></td>
<td><h4>Localizaci&oacute;n</h4></td>
<td><h4>Cantidad</h4></td>
<td><h4>Cantidad total Stock </h4></td>
</tr>';
$n=$registro_inicio +1;
while($fila=mysql_fetch_array($resultado)){
$codigo_articulo=$fila["cod_articulo"];
echo '<tr>

<td>'.$fila["nombre"].'</td>
<td>'.$fila["descripcion_articulo"].' </td>
<td colspan="2">';
$sql_tipo="SELECT inventario.*, tipo_usuario.* FROM inventario, tipo_usuario WHERE (inventario.tipo_usuario=tipo_usuario.id_tipo_usua rio) AND inventario.cod_articulo=$codigo_articulo ORDER BY cod_articulo ASC, tipo_usuario ASC";
$resultado_tipo=mysql_query($sql_tipo);
if($resultado_tipo){
if(mysql_num_rows($resultado)<=0){//No hay resultados
echo '<p>No hay </p> <br />';
}else{//Si hay un resultado
echo '<table border="1" cellpadding="5" cellspacing="5" width="100%">';
while($fila_tipo=mysql_fetch_array($resultado_tipo )){

echo '<tr>
<td>'.$fila_tipo["desc_tipo_usuario"].'</td>
<td>'.$fila_tipo["cantidad"].' Unidades</td>
</tr>';
}
echo '</table>';
}
}else{
mysql_error();
}

echo '</td>

<td>';

$sql_total="SELECT `cod_articulo`, `tipo_usuario`, SUM(cantidad) AS total_unidades, `fecha_grabado` FROM inventario WHERE `tipo_usuario` IN (1,2,3,4) AND `cod_articulo`=$codigo_articulo GROUP BY cod_articulo";
$resultado_total=mysql_query($sql_total);
//echo $sql_total;
if($resultado_total){
$fila_total=mysql_fetch_array($resultado_total);
echo $fila_total["total_unidades"].' Unidades';
}else{
mysql_error();
}
echo '</td>
</tr>
';
$n++;
}

echo '</table>';
echo paginar($pag,$totalregistros,$cantidad_pag,"tecnic o_admin_articulos_stock.php?pag=");
}else{
mysql_error();
}
Espero que me podais ayudar, es para el trabajo.
Muchas gracias de antemano ARTISTAS.
BESITOS
Ire.
  #7 (permalink)  
Antiguo 12/03/2008, 04:53
 
Fecha de Ingreso: febrero-2008
Ubicación: Bergara
Mensajes: 12
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: paginar por orden alfabetico

Hola!!
Mirando por aquí en el foro he encontrado una posible solución y modificando un poco el código me ha salido algo que aun que no era lo k yo quería inicialmente me vale.
http://www.forosdelweb.com/f18/paginador-alfabetico-253007/
Así que ya he solucionado mi problema
De todas formas os dejo mi código para que si alguien lo necesita lo utilice.

Muchas gracias a todos los que me habéis intentado ayudar.

Mi código aunque es un poco cutre espero que le sirva a alguien:

Código PHP:
if (isset($_GET["letra"])){
    
$letra=$_GET["letra"];
    }else{
    
$letra="a"//Asi siempre empieza por la letra a
    
}
          
$sql_tarifas="SELECT t . int_destino , t . smy_tarifa ,FORMAT( t . smy_tarifa*1.16, 4)  AS iva , d . int_destino_k , d . var_destino_nom FROM tarifas_venta_det t , destinos d WHERE (t . int_destino = d . int_destino_k) AND d.var_destino_nom LIKE '".$letra."%' ORDER BY d . var_destino_nom ASC"
          
$resultado_tarifa=mysql_query($sql_tarifas);
          if(
$resultado_tarifa){
          echo
'<div class="code">
                 <span class="usuario">
                     <table width="100%" border="1" cellspacing="5" cellpadding="10">
                    <caption>Tarifa para locutorio</caption>
                        <tr>
                            <td><h4>Destino</h4></td>
                            <td><h4>TARIFA €</h4></td>
                            <td><h4>+ IVA </h4></td>'
;
                            while(
$fila_tarifa=mysql_fetch_array($resultado_tarifa)){
                             
$destino=$fila_tarifa["var_destino_nom"];
                             
$tarifa=$fila_tarifa["smy_tarifa"];
                             
$iva=$fila_tarifa["iva"];
                             echo 
'<tr>
                            <td>'
.$destino.'</td>
                            <td>'
.$tarifa.'</td>
                            <td>'
.$iva.'</td>
                          </tr>'
;
                            }
echo 
'</table></span></div>';


$abecedario "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ";

for (
$i=0$i strlen($abecedario); $i++) { 
   echo 
"|<a href=\"comerciales_tarifas.php?letra=$abecedario[$i]\"> $abecedario[$i] </a>|"
}                        
          }else{
          
mysql_error();
          } 
Muchas gracias
Ire
  #8 (permalink)  
Antiguo 12/03/2008, 10:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: paginar por orden alfabetico

Cita:
Iniciado por jaronu Ver Mensaje
hola, he leido el post y por no duplicar tema pregunto aqui,

he intentado hacer lo que decis arriba pero me sale bien todas las letras en la pagina, pero solo salen los resultados de la A, despues cuando le doy a alguna letra para que me muestre los resultados de la letra M por ejemplo, siempre me muestra la primera pagina que sale, la de la letra A,

alguien sabe donde meto la pata? Gracias.


Código PHP:
$_pagi_sql "SELECT * FROM archivos  WHERE name LIKE 'A%' order by name ASC";  
$_pagi_result mysql_query($_pagi_sql $conexion) or die ( mysql_error() );  
 
echo 
"<table width=65%><tr style='border:1px solid #009900' ><div align=center>";
if (
$_pagi_result == NULL){
        echo 
"No hay resultados por esa letra";
  }  else {       
         foreach( 
range'a''z' ) as $letra ) {
          
 echo 
"<a href=\"listar_archivos_ordenalf.php?letra=$letra\">$letra</a>|";



 }
}


echo 
"</div></tr>";    

echo 
"</table>" ;
while(
$row mysql_fetch_array($_pagi_result)){
$size=$row[size];
 



echo 
"<table width=65%><tr bgcolor= #61e877><div align=center>";

echo 
"<b>Titulo: </b>";
echo 
$row[name];
echo 
"</div></tr>";
echo
"<tr>&nbsp;</tr>";
echo 
"<tr bgcolor= #c3c3c3><b> &nbsp;&nbsp;&nbsp;Descripcion: </b><br><br>";

echo 
$row[description];
echo 
"</tr>";

echo
"<tr bgcolor= #c3c3c3 >&nbsp;</tr>";
echo 
"<tr bgcolor= #c3c3c3><b> &nbsp;&nbsp;&nbsp;Tamaño: </b>";




echo 
tamano_humano($size $precision )." ";
 
echo 
"</tr>";


echo
"<tr bgcolor= #c3c3c3>&nbsp;</tr>";

echo 
"<tr bgcolor= #c3c3c3><div align=center><a href=\"descargar.php?ruta=archivos/$row[ruta]\">Descargar</a></div>"
//echo "<tr bgcolor= #cccccc><div align=center><a href=archivos/$row[ruta]>Descargar</a></div>";


echo "</table>" ;


estan paginados los resultados con el PAGINATOR de jpinedo, pero esa parte del codigo no la he puesto para no sobrecargar,
Gracias.
Tu problema es porque en tu query nunca le pasas el valor, siempre le dices que te filtre por A%, debes de cambiar esa letra por el valor que te llega por $_GET.

Saludos.
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 02:51.