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

[SOLUCIONADO] ¿Cómo validar si múltiples registros existen en una tabla?

Estas en el tema de ¿Cómo validar si múltiples registros existen en una tabla? en el foro de Mysql en Foros del Web. ¡Hola! Soy nuevo en el foro, por lo tanto pido disculpas si algo de mi pregunta les pueda incomodar. antes que nada quiero que tengan ...
  #1 (permalink)  
Antiguo 31/08/2013, 23:48
 
Fecha de Ingreso: agosto-2013
Ubicación: Medellín
Mensajes: 3
Antigüedad: 10 años, 7 meses
Puntos: 0
Pregunta ¿Cómo validar si múltiples registros existen en una tabla?

¡Hola! Soy nuevo en el foro, por lo tanto pido disculpas si algo de mi pregunta les pueda incomodar. antes que nada quiero que tengan en cuenta que ya busqué en Google posibles soluciones a mi pregunta, pero nada he podido solucionar, así que probaré si aquí llego a una solución exitosa con ayuda de ustedes.

Pasa lo siguiente: tengo una tabla en MySQL en la que guardo el historial de conexión de mis usuarios, asgo así:

_______________________________________
............. connectionhistory.................|
_______________________________________
userId.........|..........Date.................... |
______________________________________|
337.............| 2013-08-16 16:42:52 |
337.............| 2013-08-17 16:42:52 |
338.............| 2013-08-18 16:42:52 |
339.............| 2013-08-18 16:42:52 |
340.............| 2013-08-18 16:42:52 |
______________________________________|


Quiero obtener toda la información que haya en un rango de fecha por ejemplo:
Código MySQL:
Ver original
  1. SELECT * FROM connectionhistory
  2. WHERE Date >= '2013-08-17 16:42:52'
  3. AND Date <= '2013-08-18 16:42:52'

ésta consulta me devolvería:
337 | 2013-08-17 16:42:52 |
338 | 2013-08-18 16:42:52 |
339 | 2013-08-18 16:42:52 |
340 | 2013-08-18 16:42:52 |

Ahora, lo que quiero hacer es un poco mas complejo: quiero que solo me retorne éstos datos, en el mismo rango de fecha, pero que no me retorne una fila, si su userId ya se encuentra registrado en una fecha anterior a la fecha menor (inicial) de mi consulta.

he intentado lo siguiente:
Código MySQL:
Ver original
  1. SELECT DISTINCT @usr:=userId, Date FROM connectionhistory
  2. WHERE not EXISTS (SELECT userId FROM connectionhistory
  3.                                 WHERE usrID = @usr
  4.                                 AND  Date < '2013-08-17 16:42:52')
  5. AND Date >= '2013-08-17 16:42:52'
  6. AND Date <= '2013-08-18 16:42:52';

Necesito que me retorne lo siguiente:
338 | 2013-08-18 16:42:52 |
339 | 2013-08-18 16:42:52 |
340 | 2013-08-18 16:42:52 |

ya que el userId = 337, ya se encontraba registrado en la tabla, en una fecha anterior a: 2013-08-17 16:42:52, la cual es la fecha inicial de mi rango de consulta.

como nota final, mi deseo es hacer esto en una consulta o procedimiento almacenado en MySQL, se que podría obtener los datos del rango de fecha, y luego (con php) comprobar si cada uno de los userId se encuentran en la tabla en una fecha anterior a la del rango que deseo

Última edición por gnzsoloyo; 01/09/2013 a las 06:31
  #2 (permalink)  
Antiguo 01/09/2013, 15:07
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: ¿Cómo validar si múltiples registros existen en una tabla?

Seguramente, hay consultas más eficientes, pero esta te devuelve lo que buscas:
Código MySQL:
Ver original
  1.    userId,
  2.     DATE
  3.  FROM `connectionhistory`
  4.      WHERE DATE BETWEEN '2013-08-17 16:42:52' AND '2013-08-18 16:42:52'
  5.       AND userId NOT IN (SELECT
  6.                                     userId
  7.                                               FROM `connectionhistory`
  8.                                               WHERE DATE < '2013-08-17 16:42:52')

Soy consciente de que NOT IN no es muy eficiente.
Un consejo: no uses DATE como nombre de campo, pues aunque no pertenece a la lista de palabras reservadas, existe una función con el mismo nombre y puede llevarte a confusión.
  #3 (permalink)  
Antiguo 02/09/2013, 09:11
 
Fecha de Ingreso: agosto-2013
Ubicación: Medellín
Mensajes: 3
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: ¿Cómo validar si múltiples registros existen en una tabla?

Lo solucioné con lo siguiente:


Código MySQL:
Ver original
  1. SELECT DISTINCT usrID, Date FROM connectionhistory
  2.   WHERE usrID not in (select usrID
  3.                       from connectionhistory
  4.                       where DATE(Date) < DATE('2013-04-21 23:31:23'))
  5. AND DATE(Date) >= DATE('2013-04-21 23:31:23')
  6. AND DATE(Date) <= DATE('2013-05-29 12:26:50')
  7. group by usrID ORDER BY `Date` ASC ;
  #4 (permalink)  
Antiguo 02/09/2013, 09:14
 
Fecha de Ingreso: agosto-2013
Ubicación: Medellín
Mensajes: 3
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: ¿Cómo validar si múltiples registros existen en una tabla?

Muchas gracias jurena, con tu ayuda logré terminarlo! :) Gracias por el consejo, lo tendré en cuenta!

Etiquetas: select
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:45.