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

Obtener un listado de los miembros que tiene 2 semanas sin asistir

Estas en el tema de Obtener un listado de los miembros que tiene 2 semanas sin asistir en el foro de Mysql en Foros del Web. Hola amigos!. Tengo una pregunta! Tengo una tabla llamada: eventos Tengo una tabla llamada: asistencias Tengo una tabla llamada: miembros Necesito saber cuales miembros no ...
  #1 (permalink)  
Antiguo 20/09/2013, 09:25
 
Fecha de Ingreso: marzo-2009
Ubicación: Sancti Spíritus, CUBA
Mensajes: 150
Antigüedad: 15 años, 1 mes
Puntos: 7
Obtener un listado de los miembros que tiene 2 semanas sin asistir

Hola amigos!. Tengo una pregunta!

Tengo una tabla llamada: eventos
Tengo una tabla llamada: asistencias
Tengo una tabla llamada: miembros

Necesito saber cuales miembros no han tenido asistencia o no han asistido por 2 semanas. Es decir, un miembro que tenga 2 semanas sin asistir a un evento.

Agradecería cualquier idea o un ejemplo. Muchas Gracias!
  #2 (permalink)  
Antiguo 20/09/2013, 09:29
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: Obtener un listado de los miembros que tiene 2 semanas sin asistir

Cita:
Necesito saber cuales miembros no han tenido asistencia o no han asistido por 2 semanas. Es decir, un miembro que tenga 2 semanas sin asistir a un evento.
Bueno, ¿y cómo haces para saber que asistió a un evento? ¿Qué campos tiene? ¿Qué datos van en cada campo de cada tabla?

Nosotros no podemos adivinar qué estructura de datos tienes, a menos que postees información concreta.
Lo único que podemos decirte es que debes verificar contra las fechas de asistencia, y verificando quien no tiene asistencias en los últimos quince días, que a nivel de consultas es usar funciones de fecha de MySQL (las cuales puedes consultar en el manual de referencia).
Para ejemplos, muéstranos lo que intentaste... y entonces veremos por donde estás desviado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 20/09/2013, 09:36
 
Fecha de Ingreso: marzo-2009
Ubicación: Sancti Spíritus, CUBA
Mensajes: 150
Antigüedad: 15 años, 1 mes
Puntos: 7
Respuesta: Obtener un listado de los miembros que tiene 2 semanas sin asistir

Gracias por la respuesta

eventos: id_evento, nombre, create_date

miembros: id_miembro, nombre, apellido, create_date

asistencias: id_asistencia, id_miembro, id_evento, fecha_evento, create_date

Tengo algo así mas o menos...

Código MySQL:
Ver original
  1. SELECT CONCAT(m.nombre,' ',m.apellido) as nombre_completo, a.fecha FROM miembros m
  2. JOIN asistencias a ON a.id_asistencia = m.id_asistencia
  3. AND a.fecha <= DATE_SUB(now(), INTERVAL 2 WEEK) GROUP BY m.nombre;

Me gustaría saber mediante "fecha_evento", los miembros que llevan 2 semanas sin asistir a ningun evento.
  #4 (permalink)  
Antiguo 20/09/2013, 10: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: Obtener un listado de los miembros que tiene 2 semanas sin asistir

Básicamente, si la tabla de asistencias sólo aparecen los que efectivamente asistieron, y tu quieres saber quienes no asistieron en ningún momento de esas dos semanas, debes usar LEFT JOIN, y preguntar por aquellos que no tienen registros en ese período.
Para ello también te conviene obtener una tabla derivada (en el FROM), de los id de aquellos registros que corresponden al periodo.
Creo que algo así funcionaría:

Código MySQL:
Ver original
  1.     CONCAT(m.nombre,' ',m.apellido) nombre_completo
  2. FROM miembros m LEFT JOIN
  3.     (SELECT id_asistencia FROM asistencias WHERE  DATE(a.fecha) >=  DATE_SUB(CURDATE (), INTERVAL 2 WEEK)) a ON m.id_asistencia = a.id_asistencia
  4. WHERE a.id_asistencia IS NULL
  5. GROUP BY m.nombre;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 20/09/2013, 10: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: Obtener un listado de los miembros que tiene 2 semanas sin asistir

Básicamente, si la tabla de asistencias sólo aparecen los que efectivamente asistieron, y tu quieres saber quienes no asistieron en ningún momento de esas dos semanas, debes usar LEFT JOIN, y preguntar por aquellos que no tienen registros en ese período.
Para ello también te conviene obtener una tabla derivada (en el FROM), de los id de aquellos registros que corresponden al periodo.
Creo que algo así funcionaría:

Código MySQL:
Ver original
  1.     CONCAT(m.nombre,' ',m.apellido) nombre_completo
  2. FROM miembros m LEFT JOIN
  3.     (SELECT id_asistencia FROM asistencias WHERE  DATE(a.fecha) >=  DATE_SUB(CURDATE (), INTERVAL 2 WEEK)) a ON m.id_asistencia = a.id_asistencia
  4. WHERE a.id_asistencia IS NULL
  5. GROUP BY m.nombre;
Una aclaración es que no peudes obtener las fechas porque la fecha no existe desde el momento en que no asistió, y para poder obtener la fecha en la que debería haber asistido, o la que corresponda a la cursada con falta, deberías cruzar también aquellas tablas de donde esa información puede extraerse.
Pero si lo que quieres es saber quienes no asistieron, con eso debería alcanzar.
Por otro lado, en el uso de la funcion de fecha, tal y como la pedías, en realidad estabas preguntando por aquellas asistencias anteriores a las dos últimas semanas, y no las de las dos semanas pasadas...
Es un tema de operadores...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 20/09/2013, 20:37
 
Fecha de Ingreso: marzo-2009
Ubicación: Sancti Spíritus, CUBA
Mensajes: 150
Antigüedad: 15 años, 1 mes
Puntos: 7
Respuesta: Obtener un listado de los miembros que tiene 2 semanas sin asistir

Muchas Gracias man. TU solución es muy buena, pero el problema que he estado analizando creo que sería un rollo más grande de lo que imaginaba. Pensando y pensando encontré una mejor solución y más fácil... a la hora de registrar una asistencia, que esa fecha de ultima asistencia se registre en un campo de la tabla "miembros", que diga por ejemplo "last_attend" y ahi pues se vaya guardando la ultima asistencia... luego entonces obtendría solamente los miembros cuya ultima asistencia ("last_attend"), sea meno a 2 semanas pasadas... así obtengo lo que 2 semanas sin asistir e incluso los que llevan más de dos semanas. :D

Muchas Gracias por tu ayuda y tiempo amigo!.

Etiquetas: listado, semanas, 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 13:57.