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

Actualizar varias filas de distintos años

Estas en el tema de Actualizar varias filas de distintos años en el foro de Mysql en Foros del Web. Hola, Tengo una tabla con fechas para calcular precio etc, tiene filas para 20 años. Cuando añado una propiedad añado fechas desde el año presente ...
  #1 (permalink)  
Antiguo 16/01/2012, 06:17
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Actualizar varias filas de distintos años

Hola,
Tengo una tabla con fechas para calcular precio etc, tiene filas para 20 años.
Cuando añado una propiedad añado fechas desde el año presente hasta 2032 (esto lo calculo con php)

El problema que no sé como resolver es despues de insertar las fechas con el nombre de la propiedad tengo que actualizar las filas con su informacion como precio, temporada etc. para las fechas que se ha elegido en el formulario pero para todos los años hast 2032, es decir por ejemplo 1/7 hasta 31/8 de 2012, 2013, 2014 etc.

Como podría hacerlo sin tener tantos queries?
No sé si hay forma de hacer algo como "where cal_date beween date1 and date2, and date3 and date4 and date 5 and 6 and property= 'property1".

También si es posible me gustaría no tener que cambiar el script de actualización cada año, puedo tener un select multiple etc, el problema esta en el update en mysql.

Si insertará los precios etc a la vez que inserto las fechas y la propiedad tendria el mismo problema, no resolveria nada, ya que cada propiedad tiene diferentes precios y fechas de temporadas, asi que lo mejor es hacerlo con un update, ya que cuando un precio cambia tengo que hacer un update de todas maneras.

A lo mejor se puede hacer algo combinando con php????

En fin no sé por donde empezar y en que camino pensar.

Y no quiero cambiar la tabla por una donde se usa fecha principio de temporada y final de temporada porque eso lo tengo actualmente y me limita a tener todas las propiedades igual y el query es muy complicado para cambiar cada año las fechas de semana santa.
Asi que quiero tener esta de 20 años que funciona perfectamente, solo no sé de que manera insertar la información más comodamente.

Estas son las actualizaciones para una temporada y una propiedad para dos años, si hago lo mismo para 20 años en algunas propiedades la lista de queries será enorme.

Código:
$query = mysql_query("UPDATE calendar_table SET startdate=2012-07-01, enddate=2012-08-31
WHERE cal_date=2012-07-01 and property='$property2'");
$query = mysql_query("UPDATE calendar_table SET startdate=2013-07-01, enddate=2013-08-31
WHERE cal_date=2013-07-01 and property='$property2'");
$query = mysql_query("UPDATE calendar_table SET price_client='$price_client',
price_owner='$price_owner', price_client_week='$price_client_week',
price_owner_week='$price_owner_week', description='$description', 
elena='$elena', elena_n='$elena_n', minimo='$minimo'
WHERE cal_date between 2012-07-01 and 2012-08-31 and property='$property2'");
$query = mysql_query("UPDATE calendar_table SET price_client='$price_client',
price_owner='$price_owner', price_client_week='$price_client_week',
price_owner_week='$price_owner_week', description='$description', 
elena='$elena', elena_n='$elena_n', minimo='$minimo'
WHERE cal_date between 2013-07-01 and 2013-08-31
and property='$property2'");
header ("Location: precios_propiedades_uno.php?property=$property2");
Gracias de antemano
  #2 (permalink)  
Antiguo 16/01/2012, 07:44
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: Actualizar varias filas de distintos años

saludos

Pienso que te quedaría mejor utilizando una iteración en php ya sea con un ciclo for que te haga el recorrido de los años que necesites y dentro de el si la sentencia sql.
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #3 (permalink)  
Antiguo 16/01/2012, 08:21
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: Actualizar varias filas de distintos años

Cita:
Iniciado por Nano_ Ver Mensaje
saludos

Pienso que te quedaría mejor utilizando una iteración en php ya sea con un ciclo for que te haga el recorrido de los años que necesites y dentro de el si la sentencia sql.
Gracias, suena muy bonito, pero nunca he visto una sentencia sql dentro de un ciclo php, y mis conocimientos de php son limitados, no incluyendo ciclos de fechas me temo. Alguna enlace o algo?
  #4 (permalink)  
Antiguo 17/01/2012, 01:58
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: Actualizar varias filas de distintos años

Cita:
Iniciado por Nano_ Ver Mensaje
saludos

Pienso que te quedaría mejor utilizando una iteración en php ya sea con un ciclo for que te haga el recorrido de los años que necesites y dentro de el si la sentencia sql.
Gracias de nuevo,
Disculpe el anterior post de que nunca he visto, que estaba confusa, lo entendi mal.

A ver si entiendo, porfa, Hasta ahora tengo esto:
Código:
  for($ano = (date("Y")) ; $ano <= 2032; $ano++)
{
echo "$ano";
$llegada = '$ano-$month-$day';
$salida = '$año-$month2-&day2';
los month y day los cogo de un formulario,
asi eligo el dia y el mes de llegada y salida y el php debe de darme los años que
debo de insertar, por ejemplo llegada=2012-01-01, 2013-01-01 etc. hasta 2032.

Y quiero update asi:
Código:
 $query = mysql_query("UPDATE calendar_table2 SET startdate='$llegada', 
enddate='$salida'
WHERE cal_date='$llegada ' and property='$propiedad'");
$query = mysql_query("UPDATE calendar_table2 SET price_client='$price_client',
  price_owner='$price_owner', price_client_week='$price_client_week',
  price_owner_week='$price_owner_week', description='$description', 
elena='$elena', elena_n='$elena_n', minimo='$minimo' 
  WHERE cal_date between '$llegada' and '$salida' and property='$propiedad'");
  $result = mysql_query($query) or die(mysql_error());}
.

Pero me da error mysql: 2012You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 1
me imagino que el php esta mal, y no se si se puede hacer un update asi.
Gracias

Última edición por helenp; 17/01/2012 a las 03:39
  #5 (permalink)  
Antiguo 17/01/2012, 03:48
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: Actualizar varias filas de distintos años

Añadiendo un foreach ya no me da error, pero no inserta nada:
for($ano = (date("Y")) ; $ano <= 2032; $ano++)
foreach ($ano as $ano2)
{
$llegada = '$ano2-$month-$day';
$salida = '$año2-$month2-$day2';
  #6 (permalink)  
Antiguo 17/01/2012, 09:31
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: Actualizar varias filas de distintos años

Parche, sobre parche, sobre parche...
Perdoname, Helenp, pero tienes que partir de la base que es muy posible que para hacer funcional lo que quieres, tengas que hacer modificaciones estructurales a la base de datos.
Yo, vista tu descripción, tengo la fuerte impresión de que el modelo de datos está mal diseñado, y no soporta correctamente lo que quieres hacer.
Necesitar hacer un update masivo por cada vez que tengas modificaciones en los precios me sugiere que el sistema entero no tiene la flexibilidad necesaria y la base no se soporta correctamente los cambios.
Pero si vas a partir de la base de no querer modificar nada de la estructura, es posible que sólo termines haciendo parche sobre parche, hasta que finalmente la cosa no funcione más.

Al margen de esto:
¿Los campos de fecha son DATE o DATETIME?
¿En la iteración del for (programación no es tema de este foro), el primer valor queda mayor o menor al segundo del BETWEEN?
¿Verificaste cómo quedan creadas las sentencias en cada línea?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 17/01/2012, 11:47
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: Actualizar varias filas de distintos años

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Parche, sobre parche, sobre parche...
Perdoname, Helenp, pero tienes que partir de la base que es muy posible que para hacer funcional lo que quieres, tengas que hacer modificaciones estructurales a la base de datos.
Yo, vista tu descripción, tengo la fuerte impresión de que el modelo de datos está mal diseñado, y no soporta correctamente lo que quieres hacer.
Necesitar hacer un update masivo por cada vez que tengas modificaciones en los precios me sugiere que el sistema entero no tiene la flexibilidad necesaria y la base no se soporta correctamente los cambios.
Pero si vas a partir de la base de no querer modificar nada de la estructura, es posible que sólo termines haciendo parche sobre parche, hasta que finalmente la cosa no funcione más.

Al margen de esto:
¿Los campos de fecha son DATE o DATETIME?
¿En la iteración del for (programación no es tema de este foro), el primer valor queda mayor o menor al segundo del BETWEEN?
¿Verificaste cómo quedan creadas las sentencias en cada línea?
A ver, Ya tengo una calculadora con otro modelo y me limita en las posibilidades y el query es muy complicado, por lo tanto por consejos de otros mas expertos que yo he hecho una tabla donde tengo una fecha para cada dia del año y tan solo se suma los dias, y comprobado funciona y mejor. A lo primero solo pensaba tener dos años y simplemente actualizar el ultimo año al presente año, pero esta el problema del 29 de febrero, y despues de comprobar que no va lento ni nada decidi meter 20 años en vez de tan solo 2. Pero al tener una fila para cada dia y propiedad cada fila necesita su informacion. Con dos años serian solo 4 queries pero 20 años son 40 queries.

1. Los campos de fecha son DATE
2. No estoy segura si entiendo la pregunta. La iteracion del for, el primer valor es el presente año (y) y el for si hago un echo me da 2012 2013 2014 hasta 2032 (pero sin el espacio). Esos años las quiero usar en los dos valores del between mediante la variable ano2,
$llegada = '$ano2-$month-$day';
$salida = '$año2-$month2-$day2';
osea quiero por ejemplo update 1/7 2012 hasta 31/8 2012 y 1/7 2013 hasta 31/8 2013 y asi hasta 2032. No se si se puede, solo he intentando si es que lo he comprendido lo que sugirio Nano.
3. ¿Verificaste cómo quedan creadas las sentencias en cada línea?
Esta no la entiendo bien tampoco. Si se refiere a si funciona el query o no, si cambio la variable php por una fecha concreta y varios queries funciona perfectamente.

Gracias
  #8 (permalink)  
Antiguo 17/01/2012, 12:06
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: Actualizar varias filas de distintos años

Preguntas fundamentales:
¿El aumento de los montos es global para todas las propiedades, o es individual para cada una? La pregutna aputna a saber si se trata de incrementos agrupables por categoría. Eso puede darnos diferentes forma de resolver el problema.
¿El incremento a aplicar depende del año en que se aplicará?
Se puede usar el año como referencia de multiplicación, si el monto inicial es fijo.
¿Se trata de imprtes fijos o coeficientes?
Si son importes fijos a incrementar, deberás hacerlo propiedad por prompiedad, aunque se puede hacer masivamente. Pero si es un coeficiente, se puede hacer en una única consulta, en incluso puede hacerse sin diferenciar las propiedades, según el caso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 17/01/2012, 12:55
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: Actualizar varias filas de distintos años

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Preguntas fundamentales:
¿El aumento de los montos es global para todas las propiedades, o es individual para cada una? La pregutna aputna a saber si se trata de incrementos agrupables por categoría. Eso puede darnos diferentes forma de resolver el problema.
¿El incremento a aplicar depende del año en que se aplicará?
Se puede usar el año como referencia de multiplicación, si el monto inicial es fijo.
¿Se trata de imprtes fijos o coeficientes?
Si son importes fijos a incrementar, deberás hacerlo propiedad por prompiedad, aunque se puede hacer masivamente. Pero si es un coeficiente, se puede hacer en una única consulta, en incluso puede hacerse sin diferenciar las propiedades, según el caso.
1. A ver en vez de tener una tabla para cada propiedad tengo una para todos ya que me facilita el trabajo de buscar mejor precio etc, por lo tanto el aumento es para una propiedad en el update pone where property = 'propiedad'.

2. El incremento se aplicara a todos los años que hay en la tabla, o mejor dicho los que dan el php, que es desde presente año hasta 2032. En fin no es un incremento unicamente, es un update de una fila ya insertada, porque lo voy a usar para propiedades nuevas tambien que tienen precio 0 ya insertado.

3. Se trata de importes fijos ya que cada fila tiene una fecha, un importe que es precio diario y el nombre de la propiedad. Eso es lo que quiero hacer, propiedad por propiedad ya que cada propiedad tienen diferentes precios y hasta diferentes fechas de temporadas.

Gracias por todo
  #10 (permalink)  
Antiguo 17/01/2012, 14:10
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: Actualizar varias filas de distintos años

Cita:
A ver en vez de tener una tabla para cada propiedad tengo una para todos ya que me facilita el trabajo de buscar mejor precio etc, por lo tanto el aumento es para una propiedad en el update pone where property = 'propiedad'.
No me refería a que hubiese una tabla por propiedad. Nadie en su sano juicio haría semejante cosa, y menos si sabe algo de BBDD.
Por individual me refería si eran UPDATEs aplicables según PK, es decir, UPDATEs para propiedades específicas.

Mira, la cosa es así: Si estás planteando que necesitas hacer UPDATEs a propiedades específicas, por valores específicos y para ser aplicados en períodos específicos, tu problema no puede solucionarse con consultas genéricas, ni procesos automáticos. Se tiene que hacer manualmente, ya sea con SQL directo o usando una aplicación programada para ello.
Sólo puedes crear procesos estandarizados si:
- Las acciones se realizan en base a criterios de agrupamiento por valores o rangos (categorías, ubicaciones, tiempo, mercados, usuarios, etc.).
- Son variaciones de valor que impactan sobre el total de las instancias de la entidad "propiedad", o alguno/s de sus atributo/s.
- Se trata de conjuntos de atributos comunes a todas las propiedades, tales que peuda crearse una escala de referencia, la cual poder actualizar.
- Hubieses construido el modelo de datos de modo tal que cada propiedad individualmente pudiera ser parametrizada en base a un conjunto de criterios, y el cálculo de valores se pudiese construir automáticamente sobre esos parámetros. En ese caso el sólo modificar el valor dado a los parámetros base generaría una actualización dinámica de los precios.

Yo, personalmente, no veo una solución eficiente y eficaz sin tener que remodelar tu base. Si lo que quieres es parchar el problema para hacerlo más rápido, terminarás acudiendo a la opción de editar por formulario cada registro.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 17/01/2012, 15:16
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: Actualizar varias filas de distintos años

Cita:
Iniciado por gnzsoloyo Ver Mensaje

Mira, la cosa es así: Si estás planteando que necesitas hacer UPDATEs a propiedades específicas, por valores específicos y para ser aplicados en períodos específicos, tu problema no puede solucionarse con consultas genéricas, ni procesos automáticos. Se tiene que hacer manualmente, ya sea con SQL directo o usando una aplicación programada para ello.
Pues nada, reconstruirlo no veo como porque como lo tenga ahora tengo fechas incicio y final cada mes y un select para calcular que usa mas de 50 cases.

Tengo una idea no se si puede funcionar, cuando inserto las fechas en vez de insertar los 20 años de golpe con el nombre de la propiedad, se podria insertar por ejemplo 1/7 hasta 31/8 de los 20 años a la vez?
Y le pongo un identificativo como baja primavera por ejemplo, y cuando voy a cambiar precio seria facil hacer un where property = $propiedad AND temporada = baja_primavera?

Gracias

Etiquetas: distintos, filas, php, query, select, sql, tabla
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 10:39.