Foros del Web » Programando para Internet » PHP »

problema con orden en campo varchar

Estas en el tema de problema con orden en campo varchar en el foro de PHP en Foros del Web. Hola tengo un campo varchar que contiene datos como esta lista De 1000 Kg De 2000 Kg De 10000 Kg De 15000 Kg al hacer ...
  #1 (permalink)  
Antiguo 08/08/2005, 13:28
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 14 años, 9 meses
Puntos: 1
problema con orden en campo varchar

Hola tengo un campo varchar que contiene datos como esta lista

De 1000 Kg
De 2000 Kg
De 10000 Kg
De 15000 Kg

al hacer un order by por ese campo me lo ordena de la siguiente manera

De 1000 Kg
De 10000 Kg
De 15000 Kg
De 2000 Kg

Alguien sabe el por que o me puede dar una solucion

Gracias

Un Saludo
  #2 (permalink)  
Antiguo 08/08/2005, 13:35
Avatar de webseficientes  
Fecha de Ingreso: enero-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 320
Antigüedad: 12 años, 10 meses
Puntos: 14
Precisamente por que se trata de un campo varchar, te lo esta ordenando alfabeticamente.

Saludos!
__________________
Gerardo Benitez
Programador Web Freelance, SEO, Diseño web
  #3 (permalink)  
Antiguo 08/08/2005, 13:38
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 14 años, 9 meses
Puntos: 1
mmmm si hasta ahi lo comprendo, pero cual seria la solucion ?¿?

Un Saludo
  #4 (permalink)  
Antiguo 08/08/2005, 13:50
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 14 años, 7 meses
Puntos: 35
loading.........


que no uses campo varchar sinò INT


connection closed.
__________________

Maborak Technologies
  #5 (permalink)  
Antiguo 09/08/2005, 00:53
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 14 años, 9 meses
Puntos: 1
y no ahi solucion, ua se que poniendo un campo int pero es que tengo que ordenar por el nombre y es alfanumerico

Un Saludo
  #6 (permalink)  
Antiguo 09/08/2005, 03:19
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 14 años, 9 meses
Puntos: 1
Nadie me puede ayudar

he pensado poner un campo de orden pero es que el proyecto ya esta entregado y se me estan poniendo gallitos y quiero tocar lo menos posible

Un Saludo
  #7 (permalink)  
Antiguo 09/08/2005, 08:33
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
prueba con cast

select * from tabla order by cast(campo as int)
  #8 (permalink)  
Antiguo 09/08/2005, 16:53
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 14 años, 9 meses
Puntos: 1
No consigo que me funcione el cast simepre me pone You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'int) from capacidad' at line 1

El sql es

$consulta = mysql_query("SELECT * FROM $tabla order by cast(nombre AS int)") or die(mysql_error());

Un Saludo
  #9 (permalink)  
Antiguo 09/08/2005, 17:13
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
Prueba esto:

$consulta = mysql_query("SELECT * FROM $tabla order by cast(nombre AS unsigned)") or die(mysql_error());
  #10 (permalink)  
Antiguo 10/08/2005, 00:26
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 14 años, 9 meses
Puntos: 1
pues eso si funciona si no lleva el De delante probe con
los valores 50000,1000,200

y lo ordeno bien, pero al poner delante De lo ordeno asi
De 1000
De 200
De 50000

Con lo cual nada no funciono

Un Saludo
  #11 (permalink)  
Antiguo 10/08/2005, 01:30
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Pero si esos "De" y "Kg" son constantes ¿por qué no manejarlos aparte?... utiliza un campo int (como debe de ser para manejar cantidades) y el "De" y "Kg" solo imprimelos a la hora de mostrar los datos; si las unidades han de variar ("Kg", "Ton", "gr"...) puedes manejarlas igual en un campo aparte. La cuestión es tener las cantidades en un campo int de manera independiente.

De que se puede hacer lo que dices se puede pero sería más trabajo y poco eficiente:
- Consultas
- Explotas (por espacios)
- Guardas en matricez temporales (asociadas)
- Ordenas (esto ya fuera de la consulta)
- Imprimes

... ... me pareció esto ya se planteó una vez con alguien que usaba archivos de texto... pero si tienes BD mejor sacale la ventaja que tienes.

Solo sugiero... Un saludo!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #12 (permalink)  
Antiguo 10/08/2005, 02:45
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 14 años, 9 meses
Puntos: 1
Jam el problema es que no se si son constantes o no de momento parace que si que siempre es De numero Kg , pero el problema sera si les da pro cambiar por que a mi en principio me dijeron que seria De numero Hasta Numero....

yo queria resolverlo en el sql o en como tu dices para no tener que tocar casi codigo, pero bueno...
Asi que no me complico ni vagueo mas, voy a poner un campor orden y que ellos los hagan como les salga del mismisimo...

es que es el tipico cliente tocape....

Un Saludo y Gracias a los dos
  #13 (permalink)  
Antiguo 11/08/2005, 08:44
Avatar de webseficientes  
Fecha de Ingreso: enero-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 320
Antigüedad: 12 años, 10 meses
Puntos: 14
Cita:
Iniciado por DINASEN
Jam el problema es que no se si son constantes o no de momento parace que si que siempre es De numero Kg , pero el problema sera si les da pro cambiar por que a mi en principio me dijeron que seria De numero Hasta Numero....
Si no estuviesen en la misma unidad [kg], y se pudiesen poner gr, mts, etc no tendria sentido ordenarlos, o ya tendrias que hacer algo mas complejo que un "order by". Yo creo que tendrias que volver a consulta si "de y kg" van a ser constantes nuevamente.

Saludos!
__________________
Gerardo Benitez
Programador Web Freelance, SEO, Diseño web
  #14 (permalink)  
Antiguo 11/08/2005, 09:07
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
DINASEN, con la funcion substring() de mysql puedes seleccionar sólo el numero, pero igual dependes de que DE y Kg sean constantes en su tamaño.

select * from tabla order by cast(substring(campo,xx,yy) as UNSIGNED);

donde xx es la posicion del primer numero e yy es la cantidad de numeros.
  #15 (permalink)  
Antiguo 11/08/2005, 09:20
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 14 años, 9 meses
Puntos: 1
ok claudio me tenemos dos problemas con eso

1º no se si es constante el valor puede que si o puede que no
2º tampoko sabemos la cantidad de numeros que habra que que puede ser De 1 Kg y optyro puede ser De 100000 Kg

Muchas gracias pero currare un poko y pondre un campo orden asi que ellos lo controlen

Un Saludo
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 13:35.