Foros del Web » Programando para Internet » PHP »

Lanzar función en una fecha determinada

Estas en el tema de Lanzar función en una fecha determinada en el foro de PHP en Foros del Web. Hola buenas: Tengo una tabla, que tiene tres campos, Fecha, campo A y campo B, en esta tabla hay MUCHAS entradas, estamos hablando de entre ...
  #1 (permalink)  
Antiguo 18/05/2010, 14:34
 
Fecha de Ingreso: abril-2008
Mensajes: 43
Antigüedad: 16 años, 1 mes
Puntos: 3
Pregunta Lanzar función en una fecha determinada

Hola buenas:

Tengo una tabla, que tiene tres campos, Fecha, campo A y campo B, en esta tabla hay MUCHAS entradas, estamos hablando de entre 1.000-15.000 entradas.

Lo que necesito hacer, es que cuando el campo Fecha de una de las entradas sea exactamente igual que la hora actual (hablando en segundos), sume A+B y meta el resultado en otra base de datos.

¿Cómo puedo hacerlo de una forma eficiente?
No se me ocurre nada mejor que recorrer cada segundo TODA la tabla y comparar las fechas, y si alguna entrada tiene una fecha menor o igual a la actual, ejecutar la función que suma A+B, y ya de paso pues me guardo la siguiente fecha en la que tendré que ejecutar la función, así me ahorro de seguir ejecutando la comprobación hasta la siguiente, aunque tampoco es que me ayude mucho, ya que en cualquier momento se puede añadir otra fecha, así que debería volver a calcular cual será la siguiente.

Pero como digo, estamos hablando de tranquilamente 10.000 entradas en la base de datos, si cada segundo he de hacer un query que me devuelva 10.000 filas y comparar las fechas con la del sistema, estamos apañados...

¿Alguna idea más eficiente?

Saludos y gracias.
  #2 (permalink)  
Antiguo 18/05/2010, 14:47
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Lanzar función en una fecha determinada

Esto sería más BD que PHP.

Pero bueno... se me ocurre algo como...

Código SQL:
Ver original
  1. INSERT INTO tabla_2 SELECT nombre_campo FROM tabla_1 WHERE tiempo=NOW()

No se si entiende la idea, y tampoco estoy seguro de que esté bien. Si no me equivoco, para hacer ese tipo de INSERT, se necesita que la tabla_1 tenga los mismos campos (mismo nombre y tipo) que tabla_2. Pero creo que va por ahí el tema. Así te ahorras miles de queries desde PHP.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #3 (permalink)  
Antiguo 18/05/2010, 14:52
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: Lanzar función en una fecha determinada

Puedes hacer una query en la que busques que registros tienen la fecha actual, así el resultado devolverá todos los registros que cumplan la condición.

Por otro lado y como ya he dicho en otras ocasiones, puede que la solución que has encontrado no sea la correcta, si nos explicas porque has llegado a esta "solución" que tu crees que es la correcta podremos asesorarte para que busques soluciones alternativas.

Saludos!
__________________
El problema de nuestra época consiste en que sus hombres no quieren ser útiles sino importantes.

Winston Churchill
  #4 (permalink)  
Antiguo 18/05/2010, 14:52
 
Fecha de Ingreso: abril-2008
Mensajes: 43
Antigüedad: 16 años, 1 mes
Puntos: 3
Respuesta: Lanzar función en una fecha determinada

Hola:

Quizá no me he explicado bien. La base de datos es el menor de los problemas en sí.

El problema es que en ella hay 10.000 fechas, y cuando una fecha es IGUAL que la fecha actual, he de ejecutar una función. El problema de todo esto es que para comprobar si una fecha es igual que la actual (para saber si toca ejecutar la función), pues no me queda otra que comprobar cada segundo si alguuuuuuuna de las 10.000 fechas es igual a la fecha actual.

Si fuera una vez cada hora, pues no importa, recorres los 10.000 campos y listo. El problema es que si he de hacerlo cada segundo (necesito esta precisión, ha de ser cosa de segundos), pues generaré una carga bastante elevada y no interesa.

No se si ha quedado más claro lo que quiero decir... Es que no se como explicarlo xDDD

Gracias.
  #5 (permalink)  
Antiguo 18/05/2010, 14:54
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: Lanzar función en una fecha determinada

Cita:
Iniciado por snoz Ver Mensaje
Hola:

Quizá no me he explicado bien. La base de datos es el menor de los problemas en sí.

El problema es que en ella hay 10.000 fechas, y cuando una fecha es IGUAL que la fecha actual, he de ejecutar una función. El problema de todo esto es que para comprobar si una fecha es igual que la actual (para saber si toca ejecutar la función), pues no me queda otra que comprobar cada segundo si alguuuuuuuna de las 10.000 fechas es igual a la fecha actual.

Si fuera una vez cada hora, pues no importa, recorres los 10.000 campos y listo. El problema es que si he de hacerlo cada segundo (necesito esta precisión, ha de ser cosa de segundos), pues generaré una carga bastante elevada y no interesa.

No se si ha quedado más claro lo que quiero decir... Es que no se como explicarlo xDDD

Gracias.
Como te dije en mi anterior post, quizas el problema no este en como implementar la solución que propones si no si es la correcta.

Saludos!
__________________
El problema de nuestra época consiste en que sus hombres no quieren ser útiles sino importantes.

Winston Churchill
  #6 (permalink)  
Antiguo 18/05/2010, 15:05
 
Fecha de Ingreso: abril-2008
Mensajes: 43
Antigüedad: 16 años, 1 mes
Puntos: 3
Respuesta: Lanzar función en una fecha determinada

Bien, intentaré explicar el problema en sí:

Hay un formulario web, donde se introduce la fecha en la que quieres que se realice el cálculo y los dos valores que quieres sumar.

Entonces, esos 3 campos (fecha, valor1 y valor2), se guardan en una tabla.

De alguna forma (lo que necesito hacer de la forma más optimizada posible), la aplicación ha de realizar ese cálculo en la fecha EXACTA. Y estamos hablando de intervalos de segundos.

Esta aplicación, se está ejecutando siempre en el servidor, y en cualquier momento puede llegar otro usuario, entrar en la página web e introducir una nueva fecha y dos nuevos valores.

Una solución que me ha sugerido un amigo:
Quizá haya 3 fechas: Una para dentro de 6 segundos, otra para dentro de 7 segundos y otra para dentro de 2 horas. La idea sería, la aplicación se ejecuta, selecciona la fecha más pequeña y la compara con la actual, ve que faltan 6 segundos, configura un timer para que salte dentro de 6 segundos, salta, llama a la función que hace el cálculo y obtiene que falta 1 segundo para la siguiente, pone de nuevo el timer para pasado 1 segundo, salta, llama a la función y pone el timer para dentro de 2 horas, que es cuando se tiene que ejecutar la siguiente.
En caso de que se introduzca una nueva fecha, forzar que vuelva a calcular el timer, por si la fecha introducida es menor.

A ver si esta vez mejor...

Saludos
  #7 (permalink)  
Antiguo 18/05/2010, 15:13
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: Lanzar función en una fecha determinada

Y como vas a ejecutar tu aplicación cada X tiempo?
__________________
El problema de nuestra época consiste en que sus hombres no quieren ser útiles sino importantes.

Winston Churchill
  #8 (permalink)  
Antiguo 18/05/2010, 15:15
 
Fecha de Ingreso: abril-2008
Mensajes: 43
Antigüedad: 16 años, 1 mes
Puntos: 3
Respuesta: Lanzar función en una fecha determinada

La idea es que sea un script en php que esté siempre ejecutándose en el servidor, él será el que se encargue de comprobar cuando deberá volverse a ejecutar la función que comprueba las fechas, ejecuta la operación y pone el timer otra vez.

Saludos
  #9 (permalink)  
Antiguo 18/05/2010, 15:20
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: Lanzar función en una fecha determinada

Cita:
Iniciado por snoz Ver Mensaje
La idea es que sea un script en php que esté siempre ejecutándose en el servidor, él será el que se encargue de comprobar cuando deberá volverse a ejecutar la función que comprueba las fechas, ejecuta la operación y pone el timer otra vez.

Saludos
Los scripts PHP no pueden estar ejecutándose indefinidamente, tienen un máximo tiempo de ejecución. En su lugar debes usar un crone, en tu servidor linux, pero para ello debes tener permisos de administrador en el servidor para poder configurarlo. Yo se hacerlo pero eso se escapa del contexto de este foro :)

Saludos!
__________________
El problema de nuestra época consiste en que sus hombres no quieren ser útiles sino importantes.

Winston Churchill
  #10 (permalink)  
Antiguo 18/05/2010, 15:27
 
Fecha de Ingreso: abril-2008
Mensajes: 43
Antigüedad: 16 años, 1 mes
Puntos: 3
Respuesta: Lanzar función en una fecha determinada

Bueno, como me dijiste al principio, puede que la solución no sea la correcta ni la más adecuada, estoy totalmente abierto a sugerencias, es lo único que se me ocurrió, y no es que sea precisamente un hacha en el tema, así que supongo que habrá muchas otras formas de hacerlo.

Si no se entiende algo o se necesita más información no tengo ningún problema en intentar explicarlo lo mejor que pueda, es que no es un caso real, así que tampoco se ponerlo en situación, es una duda que me ha surgido y me gustaría saber como solucionar un problema de este estilo.

Saludos y muchas gracias Synkronice.
  #11 (permalink)  
Antiguo 18/05/2010, 15:29
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: Lanzar función en una fecha determinada

Cita:
Iniciado por snoz Ver Mensaje
Bueno, como me dijiste al principio, puede que la solución no sea la correcta ni la más adecuada, estoy totalmente abierto a sugerencias, es lo único que se me ocurrió, y no es que sea precisamente un hacha en el tema, así que supongo que habrá muchas otras formas de hacerlo.

Si no se entiende algo o se necesita más información no tengo ningún problema en intentar explicarlo lo mejor que pueda, es que no es un caso real, así que tampoco se ponerlo en situación, es una duda que me ha surgido y me gustaría saber como solucionar un problema de este estilo.

Saludos y muchas gracias Synkronice.
La solución es usar un crone de linux, ya te lo dije en mi anterior POST.

Saludos!
__________________
El problema de nuestra época consiste en que sus hombres no quieren ser útiles sino importantes.

Winston Churchill

Etiquetas: lanzar, fechas
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 06:11.