Foros del Web » Programando para Internet » PHP »

Ordenar string con números

Estas en el tema de Ordenar string con números en el foro de PHP en Foros del Web. Hola, estoy armando un sitio en php+mysql, y se me pianta un criterio de selección cuando traigo una consulta de la base de datos. La ...
  #1 (permalink)  
Antiguo 08/06/2009, 17:04
Avatar de juan jose bejar  
Fecha de Ingreso: noviembre-2005
Ubicación: Córdoba - Argentina
Mensajes: 14
Antigüedad: 19 años
Puntos: 3
Ordenar string con números

Hola,

estoy armando un sitio en php+mysql, y se me pianta un criterio de selección cuando traigo una consulta de la base de datos.

La consulta es la siguiente:

Código PHP:
$Sql="SELECT prod_id,cat_id,prod_codigo,prod_descripcion,prod_miniatura FROM productos WHERE prod_disponible=1 AND cat_id=".$id_categoria." GROUP BY prod_codigo ORDER BY prod_codigo ASC"
En la consulta ordeno por el código de producto pero si bien se realiza correctamente se me produce un error lógico con lo siguiente:

Hay códigos de productos que son así: "Nº 3","Nº 4", "Nº 5",.....,"Nº 11", "Nº 12", "Nº 13",.... etc.

Cuando el SQL hace la consulta, toma para ordenar el primer número que encuentra y el resultado del orden es:

Nº 11
Nº 12
Nº 13
........
Nº 19
Nº 3
Nº 4
Nº 5
........
Nº 9

Es decir, que no me sirve el orden, por lo que lo que necesito es que quede de la siguiente manera:

Nº 3
Nº 4
Nº 5
Nº 6
......
Nº 11
Nº 12
Nº 13
......
etc.

Una primera solución sería poner el 0 (cero) antes del 3, 4, 5... etc, pero dentro de un listado de 600 productos, pedirle a mi cliente que le ponga un cero sería medio trucho...

¿Alguien conoce cómo se soluciona este "temita"?
  #2 (permalink)  
Antiguo 08/06/2009, 17:08
 
Fecha de Ingreso: junio-2009
Ubicación: Mar del Plata
Mensajes: 33
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Ordenar string con números

Después de ejecutar la consulta, podés guardar los resultados en un array, y luego le aplicas natsort() a ese array.

Es una solución muy rápida que se me ocurrió, quizas haya algo mejor.
  #3 (permalink)  
Antiguo 08/06/2009, 17:27
Avatar de juan jose bejar  
Fecha de Ingreso: noviembre-2005
Ubicación: Córdoba - Argentina
Mensajes: 14
Antigüedad: 19 años
Puntos: 3
Respuesta: Ordenar string con números

Gracias Rodrigo... Muy rápida tu respuesta, pero encontré la forma adecuada desde el mismo MySQL, la comparto para quienes tengan el mismo inconveniente:

Cita:
Iniciado por MySQL
Another way of sorting a field containing both text and numbers such as this:

+------+
| code |
+------+
| A10 |
| A20 |
| A5 |
| A6 |
| A7 |
| A8 |
| A9 |
+------+


You can query like this:
mysql> select * from table order by length(code), code;

+------+
| code |
+------+
| A5 |
| A6 |
| A7 |
| A8 |
| A9 |
| A10 |
| A20 |
+------+

Posted by Roberto Eduardo Decurnex Gorosito on June 19 2007 6:41am
Es decir, que a mi consulta la modifiqué de la siguiente manera:

Código PHP:
ORDER BY length(prod_codigo),prod_codigo ASC 
Y se solucionó perfectamente.
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 14:43.