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

Detener Consulta

Estas en el tema de Detener Consulta en el foro de Mysql en Foros del Web. Hola Amigos del foro, les cuento un dilema que tengo miren la siguiente tabla. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original CREATE TABLE IF NOT EXISTS ...
  #1 (permalink)  
Antiguo 29/04/2015, 19:36
Avatar de Killerx_8937  
Fecha de Ingreso: noviembre-2006
Mensajes: 99
Antigüedad: 17 años, 5 meses
Puntos: 0
Detener Consulta

Hola Amigos del foro, les cuento un dilema que tengo miren la siguiente tabla.

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `Asis_Asis` (
  2.   `Asis_Id` int(255) NOT NULL AUTO_INCREMENT,
  3.   `Asis_Run` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  4.   `Asis_Accion` int(2) NOT NULL,
  5.   `Asis_Fecha` datetime NOT NULL,
  6.   `Asis_UltAcc` int(2) NOT NULL,
  7.   `Asis_Autorizado` int(2) NOT NULL DEFAULT '0',
  8.   `Asis_Evento` int(2) NOT NULL DEFAULT '1',
  9.   `Asis_UserAgent` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  10.   `Asis_RemoteAddr` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  11.   PRIMARY KEY (`Asis_Id`)
  12. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=5 ;
  13.  
  14.  
  15. INSERT INTO `Asis_Asis` (`Asis_Id`, `Asis_Run`, `Asis_Accion`, `Asis_Fecha`, `Asis_UltAcc`, `Asis_Autorizado`, `Asis_Evento`, `Asis_UserAgent`, `Asis_RemoteAddr`) VALUES
  16. (1, '13.899.942-4', 1, '2015-04-20 12:53:33', 0, 0, 1, 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0', '192.168.1.23'),
  17. (2, '13.899.942-4', 2, '2015-04-20 12:54:52', 0, 0, 1, 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0', '192.168.1.23'),
  18. (3, '13.899.942-4', 1, '2015-04-20 12:55:04', 0, 0, 1, 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0', '192.168.1.23'),
  19. (4, '13.899.942-4', 1, '2015-04-21 08:02:59', 0, 0, 1, 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0', '192.168.1.23'),
  20. (5, '13.899.942-4', 2, '2015-04-21 19:00:00', 0, 0, 1, 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0', '192.168.1.23');

El Campo Asis_Accion define las acciones del registro de entrada = 1, salida = 2.

Necesito construir una consulta en la cual se busque el registro de salida asociado a la entrada del usuario
ej:
para la el dia 2015-04-20 12:55:04 no existe una salida registrada.
El siguiente registro para ese usuario es una entrada el dia 2015-04-21 08:02:59. la consulta:

Código MySQL:
Ver original
  1. SELECT * FROM  `Asis_Asis`
  2. WHERE  `Asis_Accion` =  '2' AND DATE_FORMAT(  '2015-04-20 12:55:04',  '%Y-%m-%d %H:%i:%s' ) <  `Asis_Fecha`ORDER BY  `Asis_Fecha` DESC LIMIT 0 , 0

me retorna el registro con fecha 2015-04-21 19:00:00, necesito que la consulta retorne cero filas si existe un registro con Asis_Accion='1' antes de uno con Asis_Accion='2', porque eso significa que no parco la salida asociada a ese ingreso


se entiende??
  #2 (permalink)  
Antiguo 30/04/2015, 05:58
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: Detener Consulta

Cita:
me retorna el registro con fecha 2015-04-21 19:00:00, necesito que la consulta retorne cero filas si existe un registro con Asis_Accion='1' antes de uno con Asis_Accion='2', porque eso significa que no parco la salida asociada a ese ingreso
Para lograr eso no puedes hacer una consulta simple. Tienes que hacer un JOIN o una subconsulta en el WHERE.
Por otro lado estás usando mal las funciones de fecha, ya que DATE_FORMAT() es para convertir una fecha a string, lo que en el ejemplo que das no se justifica porque MySQL recoonocería ese formato en forma implícita. En todo caso debes usar STR_TO_DATE().
AL usar DATE_FORMAT estás haciendo un formateo incorrecto de la fecha que dará resultados falsos al compararse con un DATETIME.

Además, el uso de LIMIT tampoco es correcto... Estás pidiendo que devuelva cero registros

Ahora bien, para poder proponerte una solución falta algo:
Cita:
Necesito construir una consulta en la cual se busque el registro de salida asociado a la entrada del usuario
Ok... ¿Qué usuario? ¿Como lo identificas en tu tabla?
Esto es importante porque para lograr la solución hace falta relacionar entradas y salidas el mismo usuario (voy a suponer que no creas una tabla por usuario, eso sería una calamidad). SIn eso no se puede determianr la secuencialidad de los eventos.
__________________
¿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 30/04/2015, 06:26
Avatar de Killerx_8937  
Fecha de Ingreso: noviembre-2006
Mensajes: 99
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Detener Consulta

Gracias, gnzsoloyo, por el uso de DATE_FORMAT, (nota mental).

En realidad mi consulta es asi
Código MySQL:
Ver original
  1. SELECT * FROM  `Asis_Asis` WHERE  `Asis_Run` = '13.899.942-4' AND `Asis_Accion` = '2' AND STR_TO_DATE('2015-04-20 12:55:04',  '%Y-%m-%d %H:%i:%s' ) <  `Asis_Fecha`ORDER BY  `Asis_Fecha` ASC

como veras el identificador es el run, como ves la consulta me arojo como rsultado la siguente salida del usuario 2015-04-21 19:00:00, necesito que no sea asi porque existe un ingreso anterior.

esta es mi tabla usuarios.
Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `Sis_Usuario` (
  2.   `UsuarioRun` varchar(12) COLLATE utf8_unicode_ci NOT NULL,
  3.   `UsuarioEmpresa` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  4.   `UsuarioArea` int(2) NOT NULL,
  5.   `UsuarioNombre` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  6.   `UsuarioDepartamento` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  7.   `GrupoSeguridadCodigo` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  8.   `UsuarioClave` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  9.   `UsuarioEmail` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  10.   `UsuarioTelefono` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  11.   `UsuarioFechaActualizacion` datetime NOT NULL,
  12.   `UsuarioUsuarioActualizacion` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  13.   `UsuarioCargo` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  14.   `UsuarioProfesion` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  15.   `UsuarioCuenta` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  16.   `UsuarioTipo` int(2) DEFAULT NULL,
  17.   `UsuarioBanco` int(2) DEFAULT NULL,
  18.   `UsuarioDireccion` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  19.   `UsuarioRegion` int(6) DEFAULT NULL,
  20.   `UsuarioCiudad` int(6) DEFAULT NULL,
  21.   `UsuarioComuna` int(6) DEFAULT NULL,
  22.   `UsuarioTipoHorario` int(10) NOT NULL,
  23.   `UsuarioVinculado` int(11) NOT NULL,
  24.   PRIMARY KEY (`UsuarioRun`),
  25.   KEY `Usuario_Area` (`UsuarioArea`),
  26.   KEY `GrupoSeguridadCodigo` (`GrupoSeguridadCodigo`),
  27.   KEY `UsuarioRegion` (`UsuarioRegion`),
  28.   KEY `UsuarioCiudad` (`UsuarioCiudad`),
  29.   KEY `UsuarioComuna` (`UsuarioComuna`)
  30. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Etiquetas: campo, detener, fecha, registro, select, 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 18:20.