Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

ayuda con consulta y campo precio

Estas en el tema de ayuda con consulta y campo precio en el foro de Mysql en Foros del Web. buenas, creo que 'meti' la pata a la hora de estructura mi bd, y ahora es tarde. defini un campo precio como varchar. tengo un ...
  #1 (permalink)  
Antiguo 03/03/2010, 10:05
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
ayuda con consulta y campo precio

buenas,

creo que 'meti' la pata a la hora de estructura mi bd, y ahora es tarde. defini un campo precio como varchar. tengo un valor por ejemplo de 15,95.

ahora ha llegado el momento que quiero hacer una busqueda por precios, y me da el listado que quiere. hago algo asi:

SELECT * FROM WHERE precio < 15

y me da precios con valor superior. puedo parsear ese dato o hacer algo para poder hacer esa seleccion por precio?

saludos!
  #2 (permalink)  
Antiguo 03/03/2010, 11:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ayuda con consulta y campo precio

Tienes dos formas: O crear un campo DECIMAL y trasladar el dato haciendo casting, o bien hacer el CAST en la consulta.
Ten en cuenta que la mejor opción es la primera por muchas razones.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 03/03/2010, 14:21
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
Respuesta: ayuda con consulta y campo precio

puedes indicarme como hacerlo? no se como hacerlo

saludos
  #4 (permalink)  
Antiguo 03/03/2010, 14:33
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: ayuda con consulta y campo precio

Un detalle importante es que en mysql el separador decimal no es la coma (,) sino el punto. Eso también lo deberías cambiar.

Lo que te dice gnzsoloyo es que hagas un campo decimal y pases el valor casteado a este campo.

Por ejemplo:

Código MySQL:
Ver original
  1. mysql> create table prueba_precio(precio varchar(10));
  2. Query OK, 0 rows affected (0.05 sec)
  3.  
  4. mysql> insert into prueba_precio values('12,95');
  5. Query OK, 1 row affected (0.00 sec)
  6.  
  7. mysql> select *from prueba_precio;
  8. +--------+
  9. | precio |
  10. +--------+
  11. | 12,95  |
  12. +--------+
  13. 1 row in set (0.00 sec)
  14.  
  15. mysql> alter table prueba_precio add precio_d decimal(12,3);
  16. Query OK, 1 row affected (0.11 sec)
  17. Records: 1  Duplicates: 0  Warnings: 0
  18.  
  19. mysql> update prueba_precio set precio_d=replace(precio,',','.');
  20. Query OK, 1 row affected (0.01 sec)
  21. Rows matched: 1  Changed: 1  Warnings: 0
  22.  
  23. mysql> alter table prueba_precio drop column precio;
  24. Query OK, 1 row affected (0.00 sec)
  25. Records: 1  Duplicates: 0  Warnings: 0
  26.  
  27. mysql> desc prueba_precio;
  28. +----------+---------------+------+-----+---------+-------+
  29. | Field    | Type          | Null | Key | Default | Extra |
  30. +----------+---------------+------+-----+---------+-------+
  31. | precio_d | decimal(12,3) | YES  |     | NULL    |       |
  32. +----------+---------------+------+-----+---------+-------+
  33. 1 row in set (0.05 sec)
  34.  
  35. mysql> select *from prueba_precio;
  36. +----------+
  37. | precio_d |
  38. +----------+
  39. |   12.950 |
  40. +----------+
  41. 1 row in set (0.00 sec)

En este punto, tu consulta ya te va a funcionar como la planteas en un principio ya que el campo ya es numérico.

La segunda opción es hacer el mismo cast en la consulta sin modificar el campo. Pero esto puede afectar el rendimiento al tener que hacer varias operaciones repetitivas.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 03/03/2010, 14:52
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
Respuesta: ayuda con consulta y campo precio

me he perdido huesos!! jajaja

que planteas exactamente? que cambie el valor de todos los productos, concretamente el precio? o lo hago en la misma consulta? que planteas exactamente
  #6 (permalink)  
Antiguo 03/03/2010, 14:54
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: ayuda con consulta y campo precio

Como te recomienda gnzsoloyo que hagas un campo numérico y pases todos los datos a dicho campo.

Como te muestro en el ejemplo.

De esa forma, tu consulta inicial va a funcionar perfecto.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 03/03/2010, 15:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ayuda con consulta y campo precio

Dependerá de lo eficiente que quieras que sea el sistema.
En primer lugar, la "metida de pata" es grave desde el punto de vista de las bases de datos, porque cada función de conversión que se deba usar son ciclos de microprocesador que se consumen. Cuando tienes algunas centenas de registros, no hay problema. Cuando son decenas de miles.... o millones....
En fin, es el tipo de errores que le cuestan el trabajo a algunos.

Volviendo al punto:
Lo mejor, lo óptimo, lo más conveniente, es (tomando el ejemplo de Huesos52):
1) Crear una columna de tipo decimal en la tabla.
Código MySQL:
Ver original
  1. ALTER TABLE prueba_precio add precio_d DECIMAL(12,3);
2) Realizar un UPDATE masivo pasando los valores de la columna de precio a la nueva columna, realizando el CAST indicado por huesos52:
Código MySQL:
Ver original
  1. UPDATE prueba_precio SET precio_d = CAST(REPLACE(precio,',','.') AS DECIMAL(12,2);
3) Eliminar la columna vieja:
Código MySQL:
Ver original
  1. ALTER TABLE prueba_precio DROP COLUMN precio;
4) Cambiar el nombre de la nueva columna por el de la vieja columna (así no hay problemas con las aplicaciones):
Código MySQL:
Ver original
  1. ALTER TABLE prueba_precio CHANGE COLUMN precio_d precio DECIMAL(12,3));
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 03/03/2010, 15:38
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
Respuesta: ayuda con consulta y campo precio

ahora!! lo he entendido

lo que he hecho es el drop del precio, y he renombrado el precio_d por precio. asi tengo el campo precio bien codificado para el futuro

saludos!!
  #9 (permalink)  
Antiguo 03/03/2010, 15:39
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
Respuesta: ayuda con consulta y campo precio

no habia leido tu post!!! exactamente lo que deciamos

saludos!
  #10 (permalink)  
Antiguo 03/03/2010, 15:51
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
Respuesta: ayuda con consulta y campo precio

chicos,

ya lo tengo. entonces, tiene que quedar con . el decimal, no? tipo asi 59.95

saludos
  #11 (permalink)  
Antiguo 03/03/2010, 16:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ayuda con consulta y campo precio

Yep. Así queda.
La coma es asunto de los formularios y de la región en que la PC está configurada. Lo que importa es que se trate de un número decimal y no un VARCHAR...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: precio, campos
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 00:44.