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

Hacer update que incremente el valor de un campo en funcion de otro campo

Estas en el tema de Hacer update que incremente el valor de un campo en funcion de otro campo en el foro de Mysql en Foros del Web. Hola a todos: Tengo unos registros en mi db de MySQL a los que en funcion de las semanas que están dados de alta debo ...
  #1 (permalink)  
Antiguo 18/05/2009, 03:42
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 20 años, 10 meses
Puntos: 0
Hacer update que incremente el valor de un campo en funcion de otro campo

Hola a todos:
Tengo unos registros en mi db de MySQL a los que en funcion de las semanas que están dados de alta debo hacer que un campo se incremente en un porcentaje determinado.
Es decir: Para un registro que se ha dado de alta entre el 01/01/2007 y el 31/01/2007 y que lleva 1 mes o menos dado de alta el campo "precio" se incrementará entre un 1 y un 5%. Si el mismo registro lleva dado de alta 2 meses el precio se incrementará entre un 6 y un 9%. Si lleva de alta 3 meses se incrementará entre un 10 y un 12% y así sucesivamente.
He probado ha hacerlo con un if, pero no consigo hacerlo.
¿Se podría hacer esto? y caso de que se pueda ¿tienen idea de como?

Gracias
__________________

Espero haber aprendido algo de tí.
A mi padre.
  #2 (permalink)  
Antiguo 18/05/2009, 07:46
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: Hacer update que incremente el valor de un campo en funcion de otro campo

Se puede hacer con if.
Pero que haz probado?

Código mysql:
Ver original
  1. update tabla set precio = if(fecha between '2007-01-01' and '2007-01-31',precio*1.03,precio);

Esto te actualizaría los precios en un 3% mas, los comprendidos entre el 1 y 31 de enero del 2007.

Cuentanos como te va.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 18/05/2009, 09:49
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: Hacer update que incremente el valor de un campo en funcion de otro campo

Eso mismo he probado yo, pero esta orden

UPDATE tabla SET precio = if(numero_meses_alta >= '1',precio*1.03,precio);

pero como le digo que si lleva dada de alta 2 meses se incrementa en un 6% y si lleva 3, un 9% y así sucesivamente hasta 12 meses de alta.

Eso es lo que no consigo saber
__________________

Espero haber aprendido algo de tí.
A mi padre.
  #4 (permalink)  
Antiguo 18/05/2009, 09:57
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: Hacer update que incremente el valor de un campo en funcion de otro campo

Puedes poner en el else del if, un nuevo if hasta que alcances todas las opciones.

Por ejemplo:
Código mysql:
Ver original
  1. UPDATE tabla SET precio = if(numero_meses_alta =1,precio*1.03,if(numero_meses_alta =2,precio*1.06,if(numero_meses_alta = 3,precio*1.09,precio),precio),precio);

Y asi sucesivamente.

Un saludo
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 18/05/2009, 10:06
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Hacer update que incremente el valor de un campo en funcion de otro campo

ciberpata,
eso puede hacerse, claro, aunque no puedes usar entre 10% y 12%, porque eso no es un dato aplicable. Tendrás que usar valores absolutos y no rangos, es decir, para el de 3 meses un 9 %, para el de 4, un 12, etc. Pero tampoco nos dices que porcentaje se aplicará cuando sea inferior a dos meses o cuando sea superior a 12.
Por otra parte, creo que no es buena idea almacenar un dato que puedes generar al vuelo, es decir, cuando lo necesites. Imagina que guardas hoy el valor para ese campo de alguien cuyo alta se produjo hace dos meses; lo almacenarías con un incremento de un 6 por ciento. Pero dentro de 9 meses, ese valor seguirá almacenado igual. Y ya no sé si será lo que quieres. Pero si lo generas en cada ocasión que necesites, sin almacenar nada, podrás obtener el resultado aplicando el porcentaje de cada momento.
Tal vez no te he entendido, pero creo que debes responder a esto antes de ofrecerte alguna otra propuesta en la misma línea de lo ya recomendado por huesos52 para hacer lo que pides.
  #6 (permalink)  
Antiguo 19/05/2009, 06:13
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: Hacer update que incremente el valor de un campo en funcion de otro campo

Yo tengo esta sentencia hecha siguiendo sus indicaciones:
Código:
update
ofertas
set
num_orden=if(
(round(TO_DAYS(ofertas.fechaexpiracion ) - TO_DAYS( date( ofertas.fechapublicacion ) ))/7)  between '1'  and '4',(1 + ROUND(RAND() * (5 - 1))), 
if((round(TO_DAYS(ofertas.fechaexpiracion ) - TO_DAYS( date( ofertas.fechapublicacion ) ))/7)  between '8'  and '12',(10 + ROUND(RAND() * (15 - 10))),num_orden)
)
where 
id_usuario='927'
AND 
estado='1'
AND
(DATE(fechapublicacion) >='2008-10-01' AND DATE(fechapublicacion) <= '2008-10-31')
De esta forma cubro todos los items que tienen entre 1y 4 semanas, y entre 8 y 12 semanas.

Ahora lo que quiero es añadir, los que tienen entre 4 y 8 semanas y hago esto (marco en rojo lo que he añadido):

Código:
update
ofertas
set
num_orden=if(
(round(TO_DAYS(ofertas.fechaexpiracion ) - TO_DAYS( date( ofertas.fechapublicacion ) ))/7)  between '1'  and '4',(1 + ROUND(RAND() * (5 - 1))), 

if(
(round(TO_DAYS(ofertas.fechaexpiracion ) - TO_DAYS( date( ofertas.fechapublicacion ) ))/7)  between '4'  and '8',(6 + ROUND(RAND() * (9 - 6))), 

if((round(TO_DAYS(ofertas.fechaexpiracion ) - TO_DAYS( date( ofertas.fechapublicacion ) ))/7)  between '8'  and '12',(10 + ROUND(RAND() * (15 - 10))),num_orden),
num_orden)
)
where 
id_usuario='927'
AND 
estado='1'
AND
(DATE(fechapublicacion) >='2008-10-01' AND DATE(fechapublicacion) <= '2008-10-31')
y no me sale, podrían explicarme por qué?. Evidentemente debo estar cometiendo un error de sintaxis pero llevo toda la mañana y no lo veo.
__________________

Espero haber aprendido algo de tí.
A mi padre.
  #7 (permalink)  
Antiguo 19/05/2009, 07:43
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: Hacer update que incremente el valor de un campo en funcion de otro campo

Que error te sale?
Donde te marca error de sintaxis?

No debería ser entre 5 y 7 el segundo if? el 4 y el 8 ya están validados en los otros dos ifs.

Ademas, veo que estas cerrando un if de mas. Recuerda que cada if que se abre nuevo es el else del anterior.

Pruebalo y nos cuentas.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #8 (permalink)  
Antiguo 19/05/2009, 10:11
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: Hacer update que incremente el valor de un campo en funcion de otro campo

El error que me da es:
[Err] 1064 - 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 '
num_orden).

Por favor puedes indicarmen donde está el parentesis de más?? Es que no lo veo
__________________

Espero haber aprendido algo de tí.
A mi padre.
  #9 (permalink)  
Antiguo 19/05/2009, 10:23
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: Hacer update que incremente el valor de un campo en funcion de otro campo

Pruebalo así:

Código mysql:
Ver original
  1. ofertas
  2. num_orden=if(
  3. (round(TO_DAYS(ofertas.fechaexpiracion) - TO_DAYS( date( ofertas.fechapublicacion ) ))/7)  between '1'  and '4',(1 + ROUND(RAND() * (5 - 1))),
  4.  
  5. (round(TO_DAYS(ofertas.fechaexpiracion ) - TO_DAYS( date( ofertas.fechapublicacion ) ))/7)  between '4'  and '8',(6 + ROUND(RAND() * (9 - 6))),
  6.  
  7. if((round(TO_DAYS(ofertas.fechaexpiracion ) - TO_DAYS( date( ofertas.fechapublicacion ) ))/7)  between '8'  and '12',(10 + ROUND(RAND() * (15 - 10))),num_orden))
  8.  
  9. id_usuario='927'
  10. estado='1'
  11. (DATE(fechapublicacion) >='2008-10-01' AND DATE(fechapublicacion) <= '2008-10-31')

un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Última edición por huesos52; 19/05/2009 a las 10:35
  #10 (permalink)  
Antiguo 19/05/2009, 11:01
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: Hacer update que incremente el valor de un campo en funcion de otro campo

Lo he hecho tal como dices:

update
ofertas
set
num_orden=if(
(round(TO_DAYS(ofertas.fechaexpiracion ) - TO_DAYS( date( ofertas.fechapublicacion ) ))/7) between '1' and '4',(1 + ROUND(RAND() * (5 - 1))),
if(
(round(TO_DAYS(ofertas.fechaexpiracion ) - TO_DAYS( date( ofertas.fechapublicacion ) ))/7) between '4' and '8',(6 + ROUND(RAND() * (9 - 6))),
if((round(TO_DAYS(ofertas.fechaexpiracion ) - TO_DAYS( date( ofertas.fechapublicacion ) ))/7) between '8' and '12',(10 + ROUND(RAND() * (15 - 10))),num_orden),num_orden))
where
id_usuario='927'
AND
estado='1'
AND
(DATE(fechapublicacion) >='2008-10-01' AND DATE(fechapublicacion) <= '2008-10-31')

y me devuelve error en la linea que pongo en rojo:
[Err] 1064 - 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 'num_orden))
__________________

Espero haber aprendido algo de tí.
A mi padre.
  #11 (permalink)  
Antiguo 19/05/2009, 12:14
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: Hacer update que incremente el valor de un campo en funcion de otro campo

Lo que te digo es que no cierres el ultimo if dos veces con num_orden.

update
ofertas
set
num_orden=if(
(round(TO_DAYS(ofertas.fechaexpiracion ) - TO_DAYS( date( ofertas.fechapublicacion ) ))/7) between '1' and '4',(1 + ROUND(RAND() * (5 - 1))),
if(
(round(TO_DAYS(ofertas.fechaexpiracion ) - TO_DAYS( date( ofertas.fechapublicacion ) ))/7) between '4' and '8',(6 + ROUND(RAND() * (9 - 6))),
if((round(TO_DAYS(ofertas.fechaexpiracion ) - TO_DAYS( date( ofertas.fechapublicacion ) ))/7) between '8' and '12',(10 + ROUND(RAND() * (15 - 10))),num_orden))
where
id_usuario='927'
AND
estado='1'
AND
(DATE(fechapublicacion) >='2008-10-01' AND DATE(fechapublicacion) <= '2008-10-31')

Fijate que solo se cierra el else en el ultimo if. Todo el ultimo if es el else del segundo if. Y el segundo if es el else del primer if.
Por eso se debe cerrar una sola vez.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
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 21:43.