Ver Mensaje Individual
  #7 (permalink)  
Antiguo 13/08/2009, 07:55
Avatar de gnzsoloyo
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, 5 meses
Puntos: 2658
Respuesta: Cambio de un campo con el tiempo

El modelo tal y como lo describes en el primer post no es ni práctico ni funcional, pecisamente por la razón que describes. No es posible, desde la base de datos verificar lo que se realiza en la web, porque está más allá de sus recursos.
MySQL No se comunica con la web, exactamente, sino al revés: tu accedes a un server de base de datos desde la web. Por lo tanto, lo que hagas en la web afectará a la base si y sólo si el servidor de web es quien controla lo que hagan los usuarios de las diferentes páginas. MySQL sólo puede controlar lo que pasa internamente, o responder a consultas que recibe, pero no genera consultas por sí mismo hacia la web...
Dicho esto, surgen dos posibilidades de resolución:
1. La mejor de todas sería controlar esto desde el mismo site, de modo de detectar cuando un usuario se ha "caído", o no está interactuando con la web. Eso es un problema de programación, se maneja dándole lifetime determinado a los objetos de sesión y lo deberás consultar con el Foro de PHP. En esencia se trataría de que la capa de negocios de tu web controle la vigencia de las sesiones, y en caso de no estar activa envíe por si misma la orden de actualizar los registros de sesiones terminadas.
2. El segundo caso es un poco más exigente en bases de datos: Controlar con un evento o un proceso programado en el servidor si los usuarios están o no activos.
Existe una sentencia que te puede mostrar qué usuarios están activos:
Código SQL:
Ver original
  1. SHOW FULL PROCESSLIST;
Esta sentencia te devuelve una tabla que en la segunda columna pone los username activos en el momento. El problema esencial es:
a) Necesitas que los usuarios se logueen contra el servidor de MySQL.
b) No puedes usar un usuario genérico.
c) Deberás darle permisos al usuario para tener una sola conexión activa al mismo tiempo.
d) El evento debe ser programado en el server MySQL, pero solamente puedes hacerlo con versiones de MySQL 5.1 en adelante, las que cuentan con CREATE EVENT, y la mayor parte de los host no tienen una versión superior a la 5.0.27.
e) Puedes, en vez del anterior, programar un evento cron en el server del host, pero eso dependerá de los privilegios que te den en el hosting.

Estas son las únicas alternativas que se me ocurren.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)