Вы должны возможно изменить структуру вашего стола. Основная идея - понятие рабочего периода, для которого требуется время начала и время окончания. Текущая структура разделяет этот факт на две строки. Вместо этого используйте одну строку.
work_periods
time_in time_out
--
2013-03-01 07:00:00 2013-03-01 12:00:00
2013-03-01 12:30:00 2013-03-01 15:30:00
Если у вас есть такой стол, вы можете легко получить разницу в минутах с timestampdiff().
select time_in, time_out,
timestampdiff(minute, time_in, time_out) elapsed_time
from work_periods;
Вы можете вернуть те же данные из существующей таблицы. Я думаю, вы должны сделать это только как временный подход. Такая структура затрудняет идентификацию «in» s, в которых отсутствуют «out» и «out» s, в которых отсутствует «in».
create table work_periods (
work_ts datetime not null,
in_or_out varchar(5) not null,
primary key (work_ts)
);
insert into work_periods values
('2013-03-01 07:00:00', 'IN'),
('2013-03-01 12:00:00', 'OUT'),
('2013-03-01 12:30:00', 'IN'),
('2013-03-01 15:30:00', 'OUT');
«Выход», который идет с каждым «в», является самым ранним «выходом», который позже, чем «в».
select wp1.work_ts time_in,
(select min(wp2.work_ts)
from work_periods wp2
where wp2.work_ts > wp1.work_ts
and wp2.in_or_out = 'OUT') time_out
from work_periods wp1
where wp1.in_or_out = 'IN';
Если у меня был выбор, я бы
- построить изменяемый вид из этого последнего ЗЕЬЕСТА,
- кода приложения обновления использовать вид, и, наконец,
- заменить просмотрите базовую таблицу в начале этого ответа.
Вы хотите, чтобы он выплескивал столько строк, сколько требуется, чтобы равняться 8 часам? Это немного сбивает с толку, каковы цифры в конце, представляющие? – Zachrip
Я редактировал отметки времени для ясности. Это временные карты, которые показывают, что я (например) разветвил на сегодняшний день. Я отправился в 7:00 утра, в 12:00, в 12:30 и в 15:30 в общей сложности 8 часов работы. Как я могу использовать PHP для автоматического вычисления этих часов? Благодаря! –
Они хранятся просто так? Это может быть трудно манипулировать, я бы предположил, возможно, используя sql, чтобы хранить их в столбцах «дата» и «время». Но самый простой способ сделать это - сделать это: (4-1) - (3-2) – Zachrip