Итак, у нас есть таблица, которая называется timePunches
:
CREATE TABLE `timePunches` (
`punchID` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'The unique ID of the punch',
`employeeID` VARCHAR(50) NOT NULL COMMENT 'Who did the punch',
`punchDATETIME` DATETIME NOT NULL COMMENT 'The time of the punch',
`punchDTC_LINK` DATETIME NULL DEFAULT NULL COMMENT 'The previous start time for the OUT punch',
`punchDATECRC` INT(100) NOT NULL COMMENT 'The punch CRC, to prevent hacking',
`punchDIRECTION` TINYTEXT NOT NULL COMMENT 'What the punch did',
`punchTOTAL` INT(11) NULL DEFAULT NULL,
`fullName` TEXT NULL,
PRIMARY KEY (`punchID`)
)
COLLATE='latin1_swedish_ci'
ENGINE=MyISAM
ROW_FORMAT=DYNAMIC
AUTO_INCREMENT=15825
Эта таблица используется для отслеживания времени работы наших сотрудников. То есть мы отслеживаем, когда они пробивают в и пробивают в . Эта таблица является таблицей соответствия аудита. Это означает, что мы не SELECT / UPDATE записываем, вместо этого мы SELECT / INSERT только их.
Итак, вот что происходит, когда пользователь нажимает на часы:
PUNCH IN: Приложение отправляет в базу данных employeeID
(строка), punchDATETIME
(DateTime), punchDATECRC
(int) и punchDTC_LINK
(DateTime [null]) через хранимую процедуру. Эта хранимая процедура добавляет необходимую информацию в базу данных, включая запуск внутренней функции для извлечения полного имени пользователя в ту же таблицу.
PUNCH OUT : приложение отправляет в базу данных employeeID
(строка), punchDATETIME
(DateTime), punchDATECRC
(int) и punchDTC_LINK
(DateTime). Хранимая процедура добавляет необходимую информацию, включая триггер для выполнения математических операций между обоими элементами DateTime
и заполнения допустимого имени.
Как видно из вышесказанного, когда пользователь нажимает IN , запрос выглядит примерно так:
INSERT INTO timePunches
(punchID
, employeeID
, punchDATETIME
, punchDTC_LINK
, punchDATECRC
, punchDIRECTION
, punchTOTAL
) ЗНАЧЕНИЯ (15797, 'prumple', '2012-01- 11 17:35:10 ', NULL, -2011509138,' IN ', NULL);
И, когда пользователь пробивает из , он отправляет что-то вроде этого:
INSERT INTO timePunches
(punchID
, employeeID
, punchDATETIME
, punchDTC_LINK
, punchDATECRC
, punchDIRECTION
, punchTOTAL
) ЗНАЧЕНИЯ (15797, 'prumple', '2012-01- 11 19:39:52 ',' 2012-01-11 17:35:10 ', -2011509138, «OUT», NULL);
Итак, как мы видим, в DataTable для этого пользователя есть 2 элемента. Один IN
и один OUT
.
Что мне нужно сделать, это выяснить, забыл ли пользователь ударить OUT
. Итак, предположим, что пользователь нажимает IN
, работает весь день, закрывает свои часы без ударов, а затем на следующий день снова запускает IN
. Затем он работает в полную смену, и на этот раз не забивает out
.
Теперь для этой ситуации у нас есть 2 IN
ударов и только 1 OUT
ударов. Мне нужен способ обнаружить это.