Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] ordenar alfabeticamente mediante php+ajax

Estas en el tema de ordenar alfabeticamente mediante php+ajax en el foro de PHP en Foros del Web. Hola, tengo una pequeña duda, estoy haciendo un listado de registros, con la paginacion como la de twitter y facebook pero en los ejemplos que ...
  #1 (permalink)  
Antiguo 26/03/2013, 16:19
 
Fecha de Ingreso: diciembre-2006
Mensajes: 381
Antigüedad: 17 años, 10 meses
Puntos: 2
ordenar alfabeticamente mediante php+ajax

Hola, tengo una pequeña duda, estoy haciendo un listado de registros, con la paginacion como la de twitter y facebook pero en los ejemplos que vi, cuando llama al ajax se envia el ultimo id para posteriormente ordernarlos de forma descendente, por ejemplo:
Código PHP:
Ver original
  1. SELECT id,nombre FROM pais WHERE id_region=1 ORDER BY id DESC limit 20
llamada de ajax:
Código PHP:
Ver original
  1. SELECT id,nombre FROM pais WHERE id_region=1 AND id<$lastmsg ORDER BY id DESC limit 20

pero que sucede si los quiero ordernar no por el id descendente sino por su nombre ascendente?
SELECT id,nombre FROM pais WHERE id_region=1 ORDER BY nombre ASC LIMIT 20
llamada ajax:
????

he tratado asi por ajax
Código PHP:
SELECT id,nombre FROM pais WHERE id_region=1 ORDER BY nombre ASC LIMIT $lastmsg,20 
Código PHP:
SELECT id,nombre FROM pais WHERE id_region=AND pais_id<$lastmsg ORDER BY nombre ASC LIMIT 20 
Código PHP:
SELECT id,nombre FROM pais WHERE id_region=AND pais_id>$lastmsg ORDER BY nombre ASC LIMIT 20 
Ninguno funciona porque no estoy haciendo el script de la forma correcta, alguien puede darme una mano??
Gracias.
  #2 (permalink)  
Antiguo 26/03/2013, 16:30
 
Fecha de Ingreso: abril-2008
Ubicación: El Salvador
Mensajes: 736
Antigüedad: 16 años, 7 meses
Puntos: 47
Respuesta: ordenar alfabeticamente mediante php+ajax

Si el problema es el script muestralo a ver que podemos ver
  #3 (permalink)  
Antiguo 26/03/2013, 16:33
 
Fecha de Ingreso: diciembre-2006
Mensajes: 381
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: ordenar alfabeticamente mediante php+ajax

osea el problema es la sentencia sql, no sale error, simplemente no muestra los registros que deberian salir
  #4 (permalink)  
Antiguo 26/03/2013, 16:36
 
Fecha de Ingreso: abril-2008
Ubicación: El Salvador
Mensajes: 736
Antigüedad: 16 años, 7 meses
Puntos: 47
Respuesta: ordenar alfabeticamente mediante php+ajax

por eso entonces enviale los datos correctos, yo veo tus consultas y esta correctas en su estructura asi que no puedo decir mas porque opino conforme a lo que muestras y lo que muestras es correcto, el porque no te muestra los datos que quieres ese es problema de la información que le mandas y ahi si no podemos hacer nada porque no se que, como y cuando le mandas la información
  #5 (permalink)  
Antiguo 27/03/2013, 10:23
 
Fecha de Ingreso: diciembre-2006
Mensajes: 381
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: ordenar alfabeticamente mediante php+ajax

en el script inicial

Código Javascript:
Ver original
  1. <script type="text/javascript">    
  2. $(document).on('click', '.load_more', (function(e) {        
  3.    
  4.     var last_msg_id = $(this).attr("id");    
  5.    
  6.     if(last_msg_id!='end'){
  7.  
  8.         $.ajax({
  9.             type: "POST",
  10.             url: "<?php echo $path; ?>/procesos.php",
  11.             data: {"lastmsg":last_msg_id},
  12.             beforeSend: function() {
  13.                
  14.                 $('a.load_more').append('<img src="<?php echo $path; ?>/img/facebook_style_loader.gif" />');  
  15.                
  16.             },
  17.             success: function(html){                
  18.                 $(".facebook_style").remove();
  19.                 $("ul#updates").append(html);
  20.             }
  21.         });
  22.  
  23.     }  
  24.  
  25.     return false;
  26.  
  27. }));
  28. </script>


Código PHP:
<?php
$consulta 
$db->consulta("SELECT * FROM pais ORDER BY nombre ASC limit 5"); 

if (
$db->num_rows($consulta)>0){
                     while(
$result $db->fetch_array($consulta)){ 
                   
                    
$id $result["pais_id"];
            
?>
            
            <li>
                <p class="fecha"></p>
                <p class="titulo"><?= $result["nombre"]?></p>                               
            </li>
            <?php
            
}
            
?>
 <li class="facebook_style" id="facebook_style">
                
                <a id="<?php echo $id?>" href="#" class="load_more" >Show more</a>
            </li>

<?php ?>

Script que recibe:

Código PHP:
<?php
$lastmsg 
mysql_real_escape_string($_POST['lastmsg']);
$consulta $db->consulta("SELECT * FROM pais  ORDER BY nombre ASC limit ".$lastmsg.",5"); 

while(
$result $db->fetch_array($consulta)){ 
                   
                    
$id $result["pais_id"];
                    
?>

                    <li>
                        <p class="fecha"></p>
                        <p class="titulo"><?= $result["nombre"]?></p>
                        
                    </li>
                    <?php
            
}            
    

if( 
$db->num_rows($consulta)==5){
   
?>
<li class="facebook_style" id="facebook_style"> <a id="<?php echo $id?>" href="#" class="load_more" >Show more  </a> </li>
<?php
 
}else {
    
        echo 
'<li id="facebook_style">
            <a id="end" href="#" class="load_more" >No more records</a>
            </li>'
;    
 }
La programacion esta bien, solo que no se que parametros deberia enviarle para que empieze a buscar justo donde se quedo y como debe recibirlos en la sentencia sql
  #6 (permalink)  
Antiguo 27/03/2013, 10:32
 
Fecha de Ingreso: abril-2008
Ubicación: El Salvador
Mensajes: 736
Antigüedad: 16 años, 7 meses
Puntos: 47
Respuesta: ordenar alfabeticamente mediante php+ajax

ok mira ya con codigo es mucho mas facil

Proba esto:
Lo que sucede es que en el script que te recibe las peticiones ajax debes de corregir la consulta para que te quede mas o menos asi

Código PHP:
Ver original
  1. $lastmsg = mysql_real_escape_string($_POST['lastmsg']);
  2. $consulta = $db->consulta("SELECT * FROM pais  ORDER BY nombre ASC limit ".$lastmsg.",".($lastmsg+5));
  #7 (permalink)  
Antiguo 27/03/2013, 10:42
 
Fecha de Ingreso: diciembre-2006
Mensajes: 381
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: ordenar alfabeticamente mediante php+ajax

Cita:
Iniciado por alex1084 Ver Mensaje
ok mira ya con codigo es mucho mas facil

Proba esto:
Lo que sucede es que en el script que te recibe las peticiones ajax debes de corregir la consulta para que te quede mas o menos asi

Código PHP:
Ver original
  1. $lastmsg = mysql_real_escape_string($_POST['lastmsg']);
  2. $consulta = $db->consulta("SELECT * FROM pais  ORDER BY nombre ASC limit ".$lastmsg.",".($lastmsg+5));
:(, pues no funciona, no los ordena correctamente, lo que sucede es que los ids no estan en orden, lo que esta ordenado es el nombre mas no el id, por eso me devuelve otros paises
  #8 (permalink)  
Antiguo 27/03/2013, 10:47
 
Fecha de Ingreso: abril-2008
Ubicación: El Salvador
Mensajes: 736
Antigüedad: 16 años, 7 meses
Puntos: 47
Respuesta: ordenar alfabeticamente mediante php+ajax

Mira pero te está ordenando por nombre porque eso le estas diciendo en la consulta, si queres que te ordene los id nada mas cambia el campo del order by en ves de nombre que sea id, mmm espero que te haya entendido bien..
  #9 (permalink)  
Antiguo 27/03/2013, 10:48
 
Fecha de Ingreso: diciembre-2006
Mensajes: 381
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: ordenar alfabeticamente mediante php+ajax





lo que deseo es que se ordene alfabeticamente pero desde donde se quedo, que puedo hacer?
  #10 (permalink)  
Antiguo 27/03/2013, 10:59
 
Fecha de Ingreso: abril-2008
Ubicación: El Salvador
Mensajes: 736
Antigüedad: 16 años, 7 meses
Puntos: 47
Respuesta: ordenar alfabeticamente mediante php+ajax

ok, ya entendi lo que quieres hacer.

Lo unico que se me ocurre es que en vez de enviar el id envies el nombre del pais porque de otra forma no veo como poder lograr lo que quieres
  #11 (permalink)  
Antiguo 27/03/2013, 11:04
 
Fecha de Ingreso: abril-2008
Ubicación: El Salvador
Mensajes: 736
Antigüedad: 16 años, 7 meses
Puntos: 47
Respuesta: ordenar alfabeticamente mediante php+ajax

Cita:
Iniciado por alex1084 Ver Mensaje
ok, ya entendi lo que quieres hacer.

Lo unico que se me ocurre es que en vez de enviar el id envies el nombre del pais porque de otra forma no veo como poder lograr lo que quieres
Es mentira lo que dije no funciona, la solución seria insertar los paises ordenados para que los id esten ordenados...
  #12 (permalink)  
Antiguo 27/03/2013, 11:05
 
Fecha de Ingreso: diciembre-2006
Mensajes: 381
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: ordenar alfabeticamente mediante php+ajax

Cita:
Iniciado por alex1084 Ver Mensaje
ok, ya entendi lo que quieres hacer.

Lo unico que se me ocurre es que en vez de enviar el id envies el nombre del pais porque de otra forma no veo como poder lograr lo que quieres
Eso estaba pensando pero una vez que envie el nombre del pais como hago la consulta?
he intentado varias pero no funciona.
edit: no puedo cambiar los ids porque ya estan vinculados con otras tablas en la bd
  #13 (permalink)  
Antiguo 27/03/2013, 11:28
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: ordenar alfabeticamente mediante php+ajax

En realidad el problema es que no estás entendiendo el uso del LIMIT.
Esa cláusula no expresa un rango de valores dado para un campo, sino la cantidad de registros a mostrar de la respuesta completa de la consulta.
LIMIT tiene dos parámetros: el primero indica el offset, es decir, el desplazamiento del punto de inicio desde el registro 1 (es base 1) hacia adelante (o "abajo"), y el segundo parámetro indica cuántos registros se tomarán para la respuesta.
el primero de los dos parámetros se puede omitir, y MySQL asumirá que debe contar desde el primero registro.
En ese contexto, suponiendo que la consulta devuelva esos cinco registros, la consulta debe decir:
Código MySQL:
Ver original
  1. SELECT id,nombre
  2. FROM pais
  3. WHERE id_region=1 AND id<$lastmsg
Para la segunda debería decir:
Código MySQL:
Ver original
  1. SELECT id,nombre
  2. FROM pais
  3. WHERE id_region=1 AND id<$lastmsg
  4. LIMIT 5, 5;
Para la tercera será:
Código MySQL:
Ver original
  1. SELECT id,nombre
  2. FROM pais
  3. WHERE id_region=1 AND id<$lastmsg
  4. LIMIT 10, 5;
y así sucesivamente.
¿Cómo se calcula si se debe seguir?
Simple: Si devuelve menos que la cantidad pedida, es que se llegó al final de la tabla. Y si devuelve cero registros, es que la consulta anterior los agotó.

Todo este tipo de preguntas se puede resolver sin tanta discusión si te tomas la molestia de acudir al manual de referencia:
Cita:
La cláusula LIMIT puede usarse para restringir el número de registros retornados por el comando SELECT. LIMIT tiene uno o dos argumentos numéricos, que deben ser enteros positivos (incluyendo cero).

Con dos argumentos, el primer argumento especifica el desplazamiento del primer registro a retornar. El desplazamiento del registro inicial es 0 (no 1):
Código MySQL:
Ver original
  1. mysql> SELECT * FROM table LIMIT 5,10;  # Retrieve rows 6-15

Por compatibilidad con PostgreSQL, MySQL también soporta la sintaxis LIMIT row_count OFFSET offset.

Para recibir todos los registros de un desplazamiento hasta el final del conjunto de resultados, puede usar algún número grande para el segundo parámetro. Ete comando recibe todos los registros desde el 96th hasta el último:
Código MySQL:
Ver original
  1. mysql> SELECT * FROM table LIMIT 95,18446744073709551615;

Con un argumento, el valor especifica el número de registros a retornar desde el comienzo del conjunto de resultados:
Código MySQL:
Ver original
  1. mysql> SELECT * FROM table LIMIT 5;     # Retrieve first 5 rows

En otras palabras, LIMIT n es equivalente a LIMIT 0,n.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 27/03/2013, 12:04
 
Fecha de Ingreso: diciembre-2006
Mensajes: 381
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: ordenar alfabeticamente mediante php+ajax

con la ultima respuesta me cuenta de mi error, yo los estaba filtrando los registros asi
LIMIT 268,20

pero ese 268 es el id de la tabla, y los ids estan desordenados, por eso dentro del bucle inicial
Código PHP:
Ver original
  1. <?php
  2. while($result = $db->fetch_array($consulta)){
  3.                    
  4.                     $id++;
  5.             ?>
  6.            
  7.             <li>
  8.                 <p class="fecha"></p>
  9.                 <p class="titulo"><?= $result["nombre"]?></p>                              
  10.             </li>
  11.             <?php
  12.             }
  13. ?>

ya no es $id = $result["pais_id"]; sino esto $id++;

este en realidad no es el id sino el numero de registros mostrados, ese es el que debo enviar y con esto YA FUNCIONO !!!

Gracias a todos por su ayuda.
  #15 (permalink)  
Antiguo 27/03/2013, 12:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: ordenar alfabeticamente mediante php+ajax

Devuelto a Foro de PHP porque el tema fue resuelto en PHP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: alfabeticamente, mediante, registro, select
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 09:25.