Foros del Web » Programando para Internet » PHP »

Ordenar campo en una besqueda

Estas en el tema de Ordenar campo en una besqueda en el foro de PHP en Foros del Web. Tengo un buscador que busca segun diferentes campos, pero luego tengo laopcion de ordenar esta busqueda segun esos campos, ascendentemente y descendientemente, un campo de ...
  #1 (permalink)  
Antiguo 17/11/2004, 09:53
 
Fecha de Ingreso: septiembre-2004
Ubicación: Viviendo en Manresa(Barcelona)
Mensajes: 230
Antigüedad: 19 años, 6 meses
Puntos: 0
Ordenar campo en una besqueda

Tengo un buscador que busca segun diferentes campos, pero luego tengo laopcion de ordenar esta busqueda segun esos campos, ascendentemente y descendientemente, un campo de estos es el precio. En este campo hay numeros comprendidos entre 60.000 y 500.000, pues a la hora de ordenar por este campo, los números que estan por debajo de 100.000 me los pone o los ultimos quando es ascendiente(cosa que tendrian que ser los primeros) o al reves, lo primeros cuando tendrian que ser los ultimos. Para que os hagas una idea son precios de immuebles.Ej: 234.789,34€ ese puede ser un valor valido y no entiendo porque me hace eso.

Muchas gracias!
  #2 (permalink)  
Antiguo 17/11/2004, 10:53
 
Fecha de Ingreso: diciembre-2003
Mensajes: 23
Antigüedad: 20 años, 4 meses
Puntos: 0
Supongo que estas usando la clausula order by de SQL, revisa que tu campo precio sea de tipo numérico y no un varchar, de ser así es normal que no te ordene correctamente cifras.
  #3 (permalink)  
Antiguo 17/11/2004, 10:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pero .. tu en tu campo de "precio" . .que dato guardas? .. una cadena (string) con esos puntos de miles y tal vez hasta el caracter del Euro u otra moneda? ..

Deberías guardar en tu BD datos limpios (tampoco comentas que BD usas .. pues si bien otras BD como Access pueden tener campos de "moneda" .. Mysql por ejemplo no los tiene), es decir .. sin separador de miles (si hay decimales .. OK, usa un campo tipo DECIMAL) .. luego formatea ese tipo de campos con funciones (de PHP) como number_format() para poner los puntos de miles, etc .. El dato del "tipo de moneda" .. si tu aplicación maneja otras monedas tendrías que tener un campo extra aparte para definir ese dato del tipo de moneda que es.

Un saludo,
  #4 (permalink)  
Antiguo 17/11/2004, 11:08
 
Fecha de Ingreso: septiembre-2004
Ubicación: Viviendo en Manresa(Barcelona)
Mensajes: 230
Antigüedad: 19 años, 6 meses
Puntos: 0
Uso Phpmyadmin, y los numeros son com este ---> 234.675,67 por ejemplo. Y no se com se lo tengo que poner.
  #5 (permalink)  
Antiguo 17/11/2004, 11:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pero .. el tipo de campo que usas de que tipo es? DECIMAL? VARCHAR? ... o cual.

Un saludo,
  #6 (permalink)  
Antiguo 17/11/2004, 11:31
 
Fecha de Ingreso: septiembre-2004
Ubicación: Viviendo en Manresa(Barcelona)
Mensajes: 230
Antigüedad: 19 años, 6 meses
Puntos: 0
Aiii perdona por no decirtelo!!! Es VARCHAR y al cambiarlo a otro tipo se me come los digitos despues del punto.
  #7 (permalink)  
Antiguo 17/11/2004, 11:44
 
Fecha de Ingreso: octubre-2004
Ubicación: Barcelona
Mensajes: 195
Antigüedad: 19 años, 6 meses
Puntos: 7
Si tu base de datos es mysql debe guardar los números en formato anglosajón por lo tanto el punto sirve para separar los decimales, y si lo estás pasando a un valor integer se "come" lo que haya detrás del punto.
  #8 (permalink)  
Antiguo 17/11/2004, 11:46
 
Fecha de Ingreso: septiembre-2004
Ubicación: Viviendo en Manresa(Barcelona)
Mensajes: 230
Antigüedad: 19 años, 6 meses
Puntos: 0
Entonces es mejor poner los valores sin puntos ni comas, y luego al mostrar los pongo yo con algun tipo de script no? Y el campo de que tipo lo dejo?
  #9 (permalink)  
Antiguo 17/11/2004, 11:52
 
Fecha de Ingreso: octubre-2004
Ubicación: Barcelona
Mensajes: 195
Antigüedad: 19 años, 6 meses
Puntos: 7
Si tienes que mantener los decimales, creálo del tipo FLOAT (2) con lo que tu ejemplo 234.675,67 tendría que ser 234675.67 en la base de datos. El único problema es que si quieres que se vean en la página como estamos acostumbrados tendrás que convertirlos, PHP tiene alguna función que hace esto.
  #10 (permalink)  
Antiguo 17/11/2004, 11:56
 
Fecha de Ingreso: octubre-2004
Ubicación: Barcelona
Mensajes: 195
Antigüedad: 19 años, 6 meses
Puntos: 7
La función que puedes usar en PHP es number_format
  #11 (permalink)  
Antiguo 17/11/2004, 13:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
También te hice el comentario en mi anterior mensaje:

Cita:
Iniciado por Cluster
Pero .. tu en tu campo de "precio" . .que dato guardas? .. una cadena (string) con esos puntos de miles y tal vez hasta el caracter del Euro u otra moneda? ..

Deberías guardar en tu BD datos limpios (tampoco comentas que BD usas .. pues si bien otras BD como Access pueden tener campos de "moneda" .. Mysql por ejemplo no los tiene), es decir .. sin separador de miles (si hay decimales .. OK, usa un campo tipo DECIMAL) .. luego formatea ese tipo de campos con funciones (de PHP) como number_format() para poner los puntos de miles, etc .. El dato del "tipo de moneda" .. si tu aplicación maneja otras monedas tendrías que tener un campo extra aparte para definir ese dato del tipo de moneda que es.

Un saludo,
  #12 (permalink)  
Antiguo 18/11/2004, 08:15
 
Fecha de Ingreso: septiembre-2004
Ubicación: Viviendo en Manresa(Barcelona)
Mensajes: 230
Antigüedad: 19 años, 6 meses
Puntos: 0
Perdon Cluster!!! Es que voy bastante agoviado con la faena :P, y a veces no me fijo bien, lo siento mucho! :_(
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 22:50.