Foros del Web » Programando para Internet » PHP »

problemas ordenar numericamente en tabla

Estas en el tema de problemas ordenar numericamente en tabla en el foro de PHP en Foros del Web. Hola foreros, Sabeis como llamar a una base de datos,ordenando númericamente. Por ejemplo 1 12 20 31 No esto 1 10 12 2 9 90 ...
  #1 (permalink)  
Antiguo 20/10/2006, 11:54
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 5 meses
Puntos: 4
problemas ordenar numericamente en tabla

Hola foreros,

Sabeis como llamar a una base de datos,ordenando númericamente.

Por ejemplo
1
12
20
31

No esto
1

10
12
2
9
90


mysql_query("SELECT * FROM tabla ORDER BY Num ASC",$conexion);


Muchas gracias
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #2 (permalink)  
Antiguo 20/10/2006, 12:36
Avatar de djreficul  
Fecha de Ingreso: julio-2006
Ubicación: Cork
Mensajes: 672
Antigüedad: 17 años, 9 meses
Puntos: 0
Eso será porque el campo Num es de tipo cadena y no de tipo integer, no? Comprueba eso.

Saludos.
__________________
La muerte es un camino que todos debemos recorrer...
  #3 (permalink)  
Antiguo 20/10/2006, 12:40
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 7 meses
Puntos: 19
Para hacer eso tienes que convertir el campo a numerico en el ORDER BY. No recuerdo como se hacía. Consulta la página oficial a ver.
Un saludo
  #4 (permalink)  
Antiguo 20/10/2006, 12:44
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Claro, Num debe ser un campo de tipo numerico, o si no lo es convertirlo a numerico; desde la definición de la tabla o al hacer la consulta.
  #5 (permalink)  
Antiguo 20/10/2006, 12:54
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 4 meses
Puntos: 4
Pues la sentencia que utilizas debería darte resultado:

Código PHP:
mysql_query("SELECT * FROM tabla ORDER BY Num ASC",$conexion); 
A menos que hayas guardado estos números como texto y que mysql los interpreta no en un orden natural como el que nosotros conocemos comunmente sino que te los pone en un orden lexicográfico, este se interpreta como ya te habras dado cuenta en un orden no tan común, por ejemplo el "2" es mayor que la cadena "12" porque 2 viene después de 1 (12). Es algo así como ordenar por la primera letra del abecedario.

Para saber más del orden natural, checa este enlace http://www.naturalordersort.org/

Haz lo que ya te comentaron de cambiar tu tabla y si no lo quieres hacer, probablemente deberías de colocarles a estos números ceros a la izquierda y así solucionarías tu problema. Un ejemplo:

Código PHP:
<?php
$numero 
= array( 10122990 ); // suponiendo que este es tu array de numeros

foreach ( $numero as $num )
{
   
$num sprintf "%010d"$num ); // agregamos ceros a la izquierda
   
$numeros[] = $num// los guardamos en un nuevo array
}
echo 
"<p>";
sort $numeros ); // ardenamos en forma ascendente

foreach ( $numeros as $nume )
{
   echo 
$nume."<br/>";
}
?>
Como verás el secreto esta en la función sort() deberías de probar primero pasarle esta funcion a tu array directamente y si no te funciona poner los ceros a la izquierda como te comente.

Código PHP:
<?php
$numero 
= array( 10122990 ); // suponiendo que este es tu array de numeros
sort $numero );

foreach ( 
$numero as $nume )
{
   echo 
$nume."<br/>";
}
?>
Espero haberme dado a entender y que mi aporte te sirva de algo. Suerte

Última edición por Erikfrancisco; 20/10/2006 a las 13:09
  #6 (permalink)  
Antiguo 20/10/2006, 14:02
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
No es necesario tanto, sólo usas esto:

Código:
mysql_query("SELECT * FROM tabla ORDER BY cast(Num as unsigned) ASC",$conexion);
  #7 (permalink)  
Antiguo 20/10/2006, 14:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por claudiovega Ver Mensaje
No es necesario tanto, sólo usas esto:

Código:
mysql_query("SELECT * FROM tabla ORDER BY cast(Num as unsigned) ASC",$conexion);
Que bueno es SQL!!! ..

Me refiero a que muchas veces se ven soluciones "PHP".. cuando no nos damos cuenta que:
"SQL" ya es un -L e n g u a j e- aunque no nos guste aprender "otro más".

Bien aprovechado .. lo útil que es ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 20/10/2006, 14:20
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 4 meses
Puntos: 4
Buena funcion claudiovega, nunca la havia escuchado ni visto pero me parece excelente todos los días se aprende algo nuevo:

http://dev.mysql.com/doc/refman/5.0/...functions.html
  #9 (permalink)  
Antiguo 29/11/2006, 11:17
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 5 meses
Puntos: 4
Muchisimas gracias a todos por la gran ayuda aportada.

E puesto en mi campo en la base de datos INT y ahora se ordenada numéricamente

$R = mysql_query("SELECT * FROM $tabla ORDER BY Campo ASC",$conexion);

Gracias nuevamente ya que lo tenia como si fuese un campo de texto.
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

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 05:14.