SELECT CON HORA DEL SISTEMA
Publicado por CARLOS (4 intervenciones) el 10/02/2018 09:56:54
Buenos días, foreros:
Estoy inmerso en una mejora de un proyecto de control de Accesos con Rfid que consiste en añadirle caducidad y franja horaria a los usuarios.
Entonces, dada la tabla
Trato de hacer un SELECT que busque si existe un registro "Serial1" o "Serial2" cuyo campo endDate sea posterior a la fecha del sistema y siempre que la hora del sistema se encuentre en la franja horaria comprendida entre HoraIni y HoraEnd.
De esta forma, si la fecha/hora actual es "10-02-2018 10:00:00" me devolveria solamente el registro 5 cuya franja horaria va desde las 08:00:00 hasta las 12:00:00 horas y su fecha de caducidad es a final de 2035. Sin embargo, el registro 4 cumple con la franja pero ya esta caducado.
Tengo el siguiente codigo en Python pero acaba de funcionar bien ...
Alguna idea...?
Gracias
Estoy inmerso en una mejora de un proyecto de control de Accesos con Rfid que consiste en añadirle caducidad y franja horaria a los usuarios.
Entonces, dada la tabla
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
DROP TABLE IF EXISTS `users`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `usersrfid` (
`id` int(255) NOT NULL AUTO_INCREMENT,
`empresa` varchar(30) NOT NULL,
`nombre` varchar(25) NOT NULL,
`apellido1` varchar(25) NOT NULL,
`apellido2` varchar(25) NOT NULL,
`nprod` int(6) NOT NULL,
`serial1` varchar(10) NOT NULL,
`serial2` varchar(10) NOT NULL,
`rfid` varchar(8) NOT NULL,
`devProfileId` int(2) NOT NULL DEFAULT '0',
`HoraIni` time NOT NULL DEFAULT '12:00:00',
`HoraEnd` time NOT NULL DEFAULT '16:00:00',
`endDate` date NOT NULL DEFAULT '2035-12-31',
`service` varchar(30) NOT NULL,
PRIMARY KEY (`serial1`),
UNIQUE KEY `serial` (`serial1`),
KEY `id` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=100010 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `usersrfid`
--
LOCK TABLES `usersrfid` WRITE;
/*!40000 ALTER TABLE `usersrfid` DISABLE KEYS */;
INSERT INTO `usersrfid` VALUES
(0,'SAMPLE','PROFILE','TYPE','0',59990,'4269959534','','0',0,'12:00:00','16:00:00','2035-12-31','Example'),
(1,'SAMPLE','PROFILE','TYPE','1',59991,'4269956318','','0',1,'12:00:00','16:00:00','2035-12-31','Example'),
(2,'SAMPLE','PROFILE','TYPE','2',59992,'4269939662','','0',2,'12:00:00','16:00:00','2035-12-31','Example'),
(3,'SAMPLE','PROFILE','TYPE','3',59993,'4269934878','','0',3,'12:00:00','16:00:00','2035-12-31','Example'),
(4,'SAMPLE','PROFILE','TYPE','4',59994,'4269958510','','0',4,'08:00:00','12:00:00','2015-12-31','Example'),
(5,'SAMPLE','PROFILE','TYPE','5',59995,'4269936206','','0',5,'08:00:00','12:00:00','2035-12-31','Example'),
(6,'SAMPLE','PROFILE','TYPE','6',59996,'4269935374','','0',6,'12:00:00','16:00:00','2035-12-31','Example'),
(7,'SAMPLE','PROFILE','TYPE','7',59997,'4269956046','','0',7,'12:00:00','16:00:00','2035-12-31','Example'),
(8,'SAMPLE','PROFILE','TYPE','8',59998,'4269960270','','0',8,'12:00:00','16:00:00','2035-12-31','Example'),
(9,'SAMPLE','PROFILE','TYPE','9',59999,'4269957054','','0',9,'12:00:00','16:00:00','2035-12-31','Example');
/*!40000 ALTER TABLE `usersrfid` ENABLE KEYS */;
UNLOCK TABLES;
Trato de hacer un SELECT que busque si existe un registro "Serial1" o "Serial2" cuyo campo endDate sea posterior a la fecha del sistema y siempre que la hora del sistema se encuentre en la franja horaria comprendida entre HoraIni y HoraEnd.
De esta forma, si la fecha/hora actual es "10-02-2018 10:00:00" me devolveria solamente el registro 5 cuya franja horaria va desde las 08:00:00 hasta las 12:00:00 horas y su fecha de caducidad es a final de 2035. Sin embargo, el registro 4 cumple con la franja pero ya esta caducado.
Tengo el siguiente codigo en Python pero acaba de funcionar bien ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# If we have the UID, continue to usersrfid
if status == MIFAREReader.MI_OK:
temp0 = (hex(uid[0])).zfill(4)
temp1 = (hex(uid[1])).zfill(4)
temp2 = (hex(uid[2])).zfill(4)
temp3 = (hex(uid[3])).zfill(4)
temp = temp0 + temp1 + temp2 + temp3
serial = temp.upper().replace("0X","")
today = time.strftime("%Y-%m-%d", time.localtime())
resultado = gmysql.cur.execute("""SELECT * FROM usersrfid WHERE serial1 = %s OR serial2 = %s""",(serial,serial,))
# Print UID
row = gmysql.cur.fetchone()
if (resultado == 1 ):
section = gmysql.cur.execute("""SELECT * FROM usersrfid WHERE serial1 = %s OR serial2 = %s AND HoraIni < NOW() AND HoraEnd > NOW() AND endDate > %s""",(serial,serial,today,))
if (section == 1):
print "(Autorizado)"
time.sleep(0.1)
else:
print "(Caducado)"
time.sleep(0.1)
else:
print "(Denegado)"
time.sleep(0.1)
Alguna idea...?
Gracias
Valora esta pregunta


0