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

Añadir fechas dependiendo de las anteriores

Estas en el tema de Añadir fechas dependiendo de las anteriores en el foro de Mysql en Foros del Web. Hola que tal, veréis os explico lo que quiero hacer, es un poco raro y no se si es posible. Esta es mi situación. Tengo ...
  #1 (permalink)  
Antiguo 24/05/2012, 01:55
 
Fecha de Ingreso: enero-2010
Mensajes: 49
Antigüedad: 14 años, 3 meses
Puntos: 0
Añadir fechas dependiendo de las anteriores

Hola que tal, veréis os explico lo que quiero hacer, es un poco raro y no se si es posible. Esta es mi situación.

Tengo un formulario html que crea un usuario. Con los datos de este formulario se alimentan dos bases de datos. Las bases quedarian mas o menos asi:

Tabla Usuaris:
Nom: XX
Cognom: XX
DNI: XX


Tabla sessions:
NOM: XX
Cognom: XX
DNI: XX
Data Inici: XX
Visita 1:
Visita 2:
........
Visita 20:


Ahi va la cosa, la primera vez que se crea un usuario solo se le da la fecha Inici, las fechas de las Visitas no. Esas se van añadiendo una a una luego. Yo lo que quiero es saber si existe la manera de que por ejemplo. Quiero añadir la Visita 1, primero he de hacer un SELECT que me mire cuantas visitas tiene ya añadidas para poder añadirle la siguiente.

No se si me estoy explicando bien, se que es complicado.

Por ejemplo: Pepe no tiene visitas aun, por lo que el numero total de visitas sería 0, entonces la fecha que yo añado es la visita 1. En la siguiente el número de visitas es 1, por lo tanto se añadiría la visita 2 y así sucesivamente.

Muchas gracias, entenderé si no podéis ayudarme ya que es bastante lioso.
  #2 (permalink)  
Antiguo 24/05/2012, 03:20
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
  #3 (permalink)  
Antiguo 04/06/2012, 02:09
 
Fecha de Ingreso: enero-2010
Mensajes: 49
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Añadir fechas dependiendo de las anteriores

pero a la hora de insertar datos en Sessions, como indico el id_usuario?

Porque por ejemplo yo hoy añado un usuario y su visita, pero dentro de un mes le añado otra visita y quiero el mismo id aprovechando que ya esta ese autoincremento, si no utilizar el DNI
  #4 (permalink)  
Antiguo 04/06/2012, 02:28
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

idUsuari en sessions no es un autoincrementado debe ser el idUsuari que obtienes de la otra tabla gracias a que el usuario se ha logueado....

Es decir el usuario se loguea y en ese momento ya sabes su idUsuari, luego usas esa info para hacer el insert en la tabla sessions. Si el usuario es nuevo se da de alta en Usuaris y despues obtienes el nuevo idUsuari que se le habra asigando y lo usas para guardar la primera visita...

Si usas el DNI seria lo mismo en la tabla Sessions el primer campo deberá contener el DNI del usuario.... Pero un integer autoincrementado ocupa menos espacio y ademas te soluciona problemas de Documentos de identidad duplicados, que los hay, y tambien el tema de formatos distintos (pasaportes, targetas de residencia.... etc).
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 04/06/2012 a las 02:35
  #5 (permalink)  
Antiguo 04/06/2012, 02:56
 
Fecha de Ingreso: enero-2010
Mensajes: 49
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Añadir fechas dependiendo de las anteriores

Ok, muchas gracias!

Etiquetas: php
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 18:51.