Ver Mensaje Individual
  #2 (permalink)  
Antiguo 24/05/2012, 03:20
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Añadir fechas dependiendo de las anteriores

La estructura no seria la que planteas

Tabla Usuaris:
idUsuari
Nom
Cognom
DNI
DataInici

Tabla sessions:
idUsuari
DataVisita

La tabla sessions debe tener un registro por vista y guardando la fecha y hora de la visita no necesitas hacer calculos sobre las anteriores....

Luego con una query puedes obtener la lista de visitas ordenadas por fecha

SELEC * FROM usuaris u LEFT JOIN sessions s ON u.idUsuari=s.idUsuari ORDER BY s.dataVisita;

o por usuario y fecha

SELEC * FROM usuaris u LEFT JOIN sessions s ON u.idUsuari=s.idUsuari ORDER BY u.cognom,u.nom,s.dataVisita;

El identificador del usuario puede ser el DNI pero es mas pràctico un entero autoincrementado, luego si quieres defines un indice unico sobre el DNI.

Para discriminar si debes guardar la primera visita o no es una question de programación, si en la misma session se ha hecho el alta no se guarda primera visita ...

O incluso podrias simplificarlo y considerar la primera visita como fecha de alta.... Pero siempre tendràs que hacer el alta antes que guardar la fecha de la session... Guardar la fecha inicial en el registro del usuario on es estrictamente necesario pero si tienes que discriminar usuarios por la fecha inicial simplifica las cosas... asegurate de que la primera visita no pueda ser anterior a la fecha inicial.... lo mas facil es guardar una visita con la misma fecha y hora que el alta....

A pesar de lo dicho tienes las datetime functions

Dependerá de las reglas de tu negocio si guardas como visitas distintas dos sessiones del mismo usuario con poco tiempo de diferencia, para ello te ayudaran las funciones que te he mencionado....

SELECT MAX(dataVisita) FROM sessions WHERE idUsuari=X

Te darà la última visita del usuario X con lo que puedes decidir si hay que guardar la nueva visita en funcion del tiempo transcurrido....

O

SELECT count(*) FROM sessions WHERE idUsuari=X

Te darà el numero de visitas del usuario X

SELECT Nom,Cognom, count(*) as Visitas FROM usuaris u LEFT JOIN sessions s ON u.idUsuari=s.idUsuari GROUP BY u.idUsuari ORDER BY Visitas DESC

Los usuarios ordenados por su numero de visitas de mayor a menor...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 24/05/2012 a las 04:46