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

[SOLUCIONADO] Modificar registros con funciones matematicas

Estas en el tema de Modificar registros con funciones matematicas en el foro de Mysql en Foros del Web. Hola a todos, a ver si logro explicarme, tengo una columna con datos numerios: 1000 750 6000 4000 etc Y quisiera modificarlos todos aplicando por ...
  #1 (permalink)  
Antiguo 22/03/2015, 04:17
Avatar de williamhpf  
Fecha de Ingreso: mayo-2009
Mensajes: 144
Antigüedad: 14 años, 11 meses
Puntos: 8
Modificar registros con funciones matematicas

Hola a todos, a ver si logro explicarme, tengo una columna con datos numerios:

1000
750
6000
4000
etc

Y quisiera modificarlos todos aplicando por ejemplo una reduccion de un 10% para que quedasen asi

900
675
5400
3600
etc

Es posible hacer esto de forma masiva?
Si alguien podria orientarme se lo agradeceria mucho, gracias.
__________________
Electricistas 24 Horas
  #2 (permalink)  
Antiguo 22/03/2015, 05:55
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: Modificar registros con funciones matematicas

Si. Es posible... Esun UPDATE masivo. No deberías tener problemas.

¿Hiciste algún intento?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 22/03/2015 a las 06:37
  #3 (permalink)  
Antiguo 22/03/2015, 06:51
Avatar de gamsomam  
Fecha de Ingreso: marzo-2015
Ubicación: ometepec
Mensajes: 12
Antigüedad: 9 años
Puntos: 2
Respuesta: Modificar registros con funciones matematicas

hola se si estoy en lo correcto pues estoy usando php y el tema es mysql

te pongo todo el código
Cita:
Editado: Código de programación no permitido en foros de Bases de Datos.
Leer las normas del foro, por favor.
  #4 (permalink)  
Antiguo 22/03/2015, 07:09
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: Modificar registros con funciones matematicas

Tres errores:
1) Lee las normas del foro. No se permite poner código no SQL en los foros de BBDD.
2) No se tratan temas de programacion en los foros de BBDD.
3) Estás desperdiciando tiempo resolviendo en un script algo que se puede hacer en una sola sentencia de SQL...
Código MySQL:
Ver original
  1. UPDATE tabla
  2. SET a = a + 0.9
  3. WHERE [condiciones que deben cumplir];
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 23/03/2015, 06:56
Avatar de williamhpf  
Fecha de Ingreso: mayo-2009
Mensajes: 144
Antigüedad: 14 años, 11 meses
Puntos: 8
Respuesta: Modificar registros con funciones matematicas

No me aclaro, suponiendo que la tabla se llame AA y la columna BB como seria exactamente la sentencia?
No entiendo porque se le suma 0.9 no habria que restarselo?
Condicion no debe cumplir ninguna, ya que quiero modificar todos los registros existentes.
Tambien deberia de redondear para que los numeros no se quedasen fraccionados, porque si uno de los registros fuera 55 el resultado de la modificacion seria 49,5

Gracias por vuestra ayuda
__________________
Electricistas 24 Horas
  #6 (permalink)  
Antiguo 23/03/2015, 07:11
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: Modificar registros con funciones matematicas

Cita:
No me aclaro, suponiendo que la tabla se llame AA y la columna BB como seria exactamente la sentencia?

Exactamente igual, cambiando el nombre de la tabla de ejemplo por el de la tuya, y el nombre del campo de ejemplo, por el que necesites.
Cita:
No entiendo porque se le suma 0.9 no habria que restarselo?

Usa el razonamiento: Es evidente que se trata de un error de tipeo:
Código MySQL:
Ver original
  1. UPDATE tabla
  2. SET a = a * 0.9
  3. WHERE [condiciones que deben cumplir];
Esta multiplicación es equivalente a
Código MySQL:
Ver original
  1. a = (a - ((a * 10)/100))
pero se escribe mas simple.
¿Conoces el concepto de "tasa"? Bueno, eso es lo que estoy aplicando.

Cita:
Condicion no debe cumplir ninguna, ya que quiero modificar todos los registros existentes.

Pues no le pongas el WHERE... yo te estoy mostrando un ejemplo, algo genérico. No te estoy diciendo que las condiciones sean obligatorias.
Cita:
Tambien deberia de redondear para que los numeros no se quedasen fraccionados, porque si uno de los registros fuera 55 el resultado de la modificacion seria 49,5
Esta es la única nota interesante de tu respuesta, aunque denota algún tipo de falta de práctica en SQL.
En SQL una asignación de valor de acuerdo a una operación de división o con numeros decimales, se almacenará respetando el tipo de dato que tenga definida la columna, y no necesariamente el resultado exacto de la operación.
Si la columna es INT, tu puedes querer asignarle esto:
Código SQL:
Ver original
  1. UPDATE tabla
  2. SET a = 0.0000009
pero al ser un INT, sólo se almacenará un cero (0).
¿Por qué?
Bueno, simplemente porque un INT no puede almacenar decimales. Así de simple.
Para almacenar decimales se deben usar campos de tipo DECIMAL o FLOAT, no INT ni en ninguna de sus variantes (TINYINT, SMALLINT, MEDIUMINT, INT BIGINT).
MySQL, cuando intentas almacenar un decimal en un entero, redondeará el valor hacia abajo o hacia arriba dependiendo de qué decimales existan luego del punto. entre el 1 y 4 decimales, trunca; entre el 5 y el 9, redondea hacia arriba.
Ahora bien, el uso de FLOAT sólo tiene sentido en cálculos científicos, y no se recomienda para valores de precisión (valores monetarios, por ejemplo), ya que los FLOAT son numeros decimales por aproximación, con lo que el 1 como entero no existe, sino el 0.999999999999999999998, por dar un ejemplo.
¿Se entiende?

Esto último no es algo privativo de MySQL. Es un problema que existe en los sistemas de representación numéricos que se usan en los sistemas digitales. Todos. Sólo que los sistemas de las computadoras tienen algoritmos específicos y métodos de conversión para hacer entendible en lenguaje humano los numeros que se manejan.
No te olvides que las computadoras trabajan en binario, y en binario no existen los decimales.Luego, hay métodos para almacenar decimales... en binario.
El problema es que algunas veces el error se filtra a los datos que manejas en tus programas, y hay que saber como resolver el incidente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 23/03/2015 a las 07:17

Etiquetas: funciones, matematicas, modificar, registros
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 16:33.