Problema con Order By en Consulta [MySQL + PHP]

Iniciado por rootusr, 14 Julio 2008, 19:10 PM

0 Miembros y 1 Visitante están viendo este tema.

rootusr

Hola a todos:

Trabajo en una aplicacion cuya base de datos en MSYQL ya habia sido creada previamente. esta aplicacion despliega en un PDF (parte resuelta) un reporte de ciertos datos ordenados en categorias por medio de un numero de registro por ejemplo:

COLOR ROJO

01 rojo a
02 rojo b
03 rojo c

COLOR AZUL

01 azul a
02 azul b
03 azul c

El problema es que el numero de registro con el que se ordenan los datos de cada categoria cambia entre una y otra. por ejemplo: por ejemplo para la primera categoria son numero enteros (123,134,1123 ...) para la segunda son letras, guiones y numeros (M_123, M_345, M_1332) y en otras son Solo guiones y numeros. en un principio no lograba hacer que el order by de mi consulta ordenara los valores por medio del identificador del registro para ninguna categoria pero depues de leer un poco encontre que añadiendo "+0" al final del campo por el cual se ordena en la consulta se solucionaba el problema y asi fue. ordena todos exepto los de la categoria que inica con una letra seguida de un guion bajo y depues un numero (M_23). el order by de mi consulta es asi:

...ORDER BY  productos.num_product+0


el resultado que devuelve para la categoria del problema es por ejemplo: M_23, M_4, M_455, M_2

el campo que indica el numero o clave del registro se debe imprimir en el reporte. la pregunta es: ¿como logro que se ordenen de manera ascendente todos los registros impresos en el reporte incluyendo aquellos que inician con una letra?

Aqui pongo un poco de infomracion Extra:
La columna en cuestion es de tipo varchar
la version de MySQL es la 5.X
la Aplicacion esta en PHP y Utilizo FPDF para generar el reporte

espero haberme explicado. desde ya muchas gracias y ojala alguien pueda darme una mano.

Hans el Topo

no se si lo he entendido, quieres ordenarlos como si fuesen solamente números no? sin _ ni letras delante es decir:

111, m_123, 200, _210, m_222?

lo que vas a tener que hacer es transformar las cadenas en números o purgar las letras (quitar cualquier caracter que no sea un número)
puedes hacerlo mediante una función/procedimiento, es decir si no encuentras una función que te elimine las letras nativa a mysql tendrás que crearla tu

y por si lo que te falla es lo básico:

para ordenar ascendente es
order by "campo o expresion" asc (por defecto toma el asc)

en descendente
order by "campo o expresion" desc

también puedes ordenar por diferentes campos
order by "campo1sin comillas" asc, "campo2sincomillas" desc