Как выбрать данные из нескольких таблиц и просмотреть их в дневное время? - PullRequest
0 голосов
/ 03 апреля 2019

Я разработал систему отслеживания перерывов на обед для сотрудников, в которой сотрудник должен вводить / выводить данные до и после перерыва на обед. Я рассчитал общий перерыв в минутах и ​​сохранил его в БД. Я предоставил отчет в отдел кадров за все время перерыва. Сложной задачей для меня здесь было предоставить отчет, в котором сотрудники вечерней смены делали обеденный перерыв на следующий день, который должен появиться в предыдущий день. Я создал код из 8 символов на каждый день, и этот код будет сохранен для каждого сотрудника.

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

У меня сейчас две таблицы.

Table CODE:

ID   | CODE     | DATE_CREATED |
1    | 9VIHQIHE | 2019-03-30   |
2    | 6JFGGU9P | 2019-03-31   | 
3    | UYVEWVN0 | 2019-04-01   |

Table BREAKTIME:
ID   | EMPLOYEE   | CODE     | TOTAL_BREAKTIME 
1    | JOHN       | 9VIHQIHE | 00:59:01 
2    | RYAN       | 9VIHQIHE | 01:01:20
3    | JOHN       | 6JFGGU9P | 01:15:08
4    | RYAN       | 6JFGGU9P | 00:58:12
5    | JOHN       | UYVEWVN0 | 00:57:32
6    | RYAN       | UYVEWVN0 | 01:05:16

Теперь мне нужен отчет, в котором будет представлена ​​сводная информация об общем отпуске каждого сотрудника за месяц.

Отчет должен выглядеть следующим образом, если мой параметр поиска - март 2019.

EMPLOYEE  |   01   |  02  | .......... |    30    |    31
JOHN      |   -    |  -   | .......... | 00:59:01 | 01:15:08
RYAN      |   -    |  -   | .......... | 01:01:20 | 00:58:12

Я не написал ни одного кода, потому что не знаю, с чего начать.

Пожалуйста, мне нужна большая помощь от ваших парней.

Спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

ОБНОВЛЕНИЕ:

Код ниже;

                    while($employees_breaktime = $result->fetch_assoc()){
                      $BreakTime[$employees_breaktime["employee"]] = $employees_breaktime;
                }




                foreach($BreakTime as $key => $val) {


                echo "<tr><td>" .$key. "</td>";

                for($d = 1; $d <= 31; $d++){
                    echo "<td>";
                    $BreakTime[$key][$d];   //LINE 207
                    echo "</td>";
                }
                    echo "</tr>";

Дает эту ошибку:

Примечание: Неопределенное смещение: 1 в E: \ xampp \ htdocs\ ett \ summary.php в строке 207

Что это значит?

0 голосов
/ 03 апреля 2019

Вы можете сделать это с помощью одного JOIN:

SELECT 
    DATE_FORMAT(c.date_created, '%d') AS date,
    b.employee,
    b.total_breaktime
FROM
    code c
    JOIN breaktime b ON b.code = c.code
WHERE
    DATE_FORMAT(date_created, '%Y-%m') = '2019-03'
ORDER BY employee , date_created;

даст вам набор данных типа

30  JOHN    00:59:01
31  JOHN    01:15:08
30  RYAN    01:01:20
31  RYAN    00:58:12

Затем вы можете сначала просмотреть эти данные и преобразовать их в двумерный массив с ключом employee, чтобы каждый «сотрудник» мог иметь свою собственную строку в конечном выводе:

while($b = $result->fetch_assoc()){
    $employee = $b["employee"];
    $date = $b["date"];
    $time = $b["total_breaktime"];

    $BreakTime[$employee][$date] = $time;
}

Результат:

$BreakTime = array(
    'JOHN' => array(
        '30' => '00:59:01',
        '31' => '01:15:08',
    ),
    'RYAN' => array(
        '30' => '01:01:20',
        '31' => '00:58:12',
    );
);

тогда, наконец, вы можете просмотреть эти данные и вывести их на страницу.

echo "<table><tbody>";

foreach($BreakTime as $key => $val) {
    echo "<tr><td>" .$key. "</td>";
    for($d=1; $d<=31; $d++) {
        echo "<td>";
        echo isset($BreakTime[$key][$d]) ? $BreakTime[$key][$d] : '00:00';
        echo "</td>";
    }
    echo "</tr>";
}

echo "</tbody></table>";
...