Отчет о посещаемости с использованием MySQL в Laravel

#mysql

Вопрос:

добрый день!

Я хотел бы сгенерировать отчет, который будет отображаться так же, как на прилагаемой фотографии. Нажмите на этот пример фотографии

Я хотел бы разделить дату и время на Время в 7:00 утра, Тайм-аут (12:00 утра), Время в полдень (12:30 утра), Тайм-аут ((5:00 вечера) в запросе

До сих пор это то, что я получаю, только статическая дата, я не знаю, как сделать ее динамичной, используя только временной диапазон, Нажмите на пример фото 2. Надеюсь, вы сможете помочь. Спасибо.

 select datetime,id,
(CASE WHEN datetime > '19/04/2021 6:30' AND datetime < '19/04/2021 8:30' THEN datetime ELSE NULL END) as TimeInAM,
(CASE WHEN datetime > '19/04/2021 11:30' AND datetime < '19/04/2021 12:30' THEN datetime ELSE NULL END) as TimeOutAM,
(CASE WHEN datetime > '19/04/2021 12:30' AND datetime < '19/04/2021 13:30'THEN datetime ELSE NULL END) as TimeInPM,
(CASE WHEN datetime > '19/04/2021 16:30' AND datetime < '19/04/2021 21:30'THEN datetime ELSE NULL END) as TimeOutPM
from time_attendances WHERE id = 1345
 

Комментарии:

1. Вам действительно не следует использовать sql для форматирования выходных данных, используйте для этой цели соответствующее программное обеспечение для создания отчетов!

2. Что касается вывода, я буду использовать Laravel. Я не знаю, подходит ли это приложение для использования. Я также думаю о MS Access, но я все еще в замешательстве.

Ответ №1:

Я предлагаю не использовать зарезервированные MySQL слова, такие как datetime : https://dev.mysql.com/doc/refman/8.0/en/keywords.html

Ты пытаешься сделать что-то подобное:

 SELECT d,
if( DATE_FORMAT(d,'%r') between '06:30:00 AM' and '08:30:00 AM' ,  d, 'Null' )  as TimeInAM ,
if( DATE_FORMAT(d,'%r') between '11:30:00 AM' and '12:29:59 AM' ,  d, 'Null' )  as TimeOutAM ,
if( DATE_FORMAT(d,'%r') between '12:30:00 AM' and '01:30:00 PM' ,  d, 'Null' )  as TimeInPM ,
if( DATE_FORMAT(d,'%r') between '04:30:00 PM' and '09:30:00 AM' ,  d, 'Null' )  as TimeOutPM 
from test ;
 

Демо: https://www.db-fiddle.com/f/7yUJcuMJPncBBnrExKbzYz/62

DATE_FORMAT(date_time,'%r') дата возврата в 07:01:00 AM 09:30:00 PM формате.

Проверьте, основываясь на ваших ценностях, и позвольте мне сейчас.

Редактировать:https://www.db-fiddle.com/f/7yUJcuMJPncBBnrExKbzYz/67

 SELECT d,dayname(d) as week_day,
if( DATE_FORMAT(d,'%r') between '06:30:00 AM' and '08:30:00 AM' ,  DATE_FORMAT(d,"%h:%i %p"), 'Null' )  as TimeInAM ,
if( DATE_FORMAT(d,'%r') between '11:30:00 AM' and '12:29:59 AM' ,  DATE_FORMAT(d,"%h:%i %p"), 'Null' )  as TimeOutAM ,
if( DATE_FORMAT(d,'%r') between '12:30:00 AM' and '01:30:00 PM' ,  DATE_FORMAT(d,"%h:%i %p"), 'Null' )  as TimeInPM ,
if( DATE_FORMAT(d,'%r') between '04:30:00 PM' and '09:30:00 PM' ,  DATE_FORMAT(d,"%h:%i %p"), 'Null' )  as TimeOutPM 
from test   order by d desc ;
 

Комментарии:

1. Спасибо. Но возможно ли также вывести его таким образом? drive.google.com/file/d/1tfOU4mEHY8J_HjV4lLmf6AFgENgypc-5/… Присоединиться к ним, если у них одна и та же дата?

2. @RomneelBacon проверьте: db-fiddle.com/f/7yUJcuMJPncBBnrExKbzYz/66