длинный скучный php код ))$starttime = date('2019-03-01');
$endtime = date('2019-04-30');
$sql = "SELECT users.`name`,user_dolg.`date` ,user_dolg.`user_id`, SUM(user_dolg.hours) sub_hours
FROM `user_dolg`
LEFT JOIN `users` ON user_dolg.`user_id`=users.`users_id`
WHERE `date` BETWEEN '".$starttime."' AND '".$endtime."'
GROUP BY `date`, `user_id`
";
$stmt = $dbo->prepare($sql);
$stmt->execute();
$result=$stmt->fetchAll();
$total_row=$stmt->rowCount();
$sql = "SELECT `id` ,`off_date`, `off_id`
FROM `dayoff` ";
$stmt = $dbo->prepare($sql);
$stmt->execute();
$result_days=$stmt->fetchAll();
$total_row=$stmt->rowCount(); //делаем второй запрос на выборку из dayoff
$days=array_column($result_days,'off_date');
$lastday=end($days);
?>
<table class="table table-bordered">
<th > user id </th>
<th > ФИО </th>
<th> часы переработки </th>
<th > дата </th>
<th > Тип дня </th>
<?php
foreach($result as $row){
echo '<tr>';
foreach($result_days as $row_days){
if( $endtime <= $lastday ) {
if($row_days['off_id']==0){ // выходной
$sub_hours=(int) $row['sub_hours'];
echo '<td>'.$row['user_id'].'</td>';
echo '<td>'.$row['name'].'</td>';
echo '<td>'.($sub_hours=$sub_hours - 0).'</td>';
echo '<td>'.$row['date'].'</td>';
echo '<td>Выходной день</td>';
}
if($row_days['off_id']==1){ //если сокращенка
$sub_hours=(int) $row['sub_hours'];
$sub_hours=$sub_hours - 7;
if( $sub_hours>0){
echo '<td>'.$row['user_id'].'</td>';
echo '<td>'.$row['name'].'</td>';
echo '<td>'.$sub_hours.'</td>';
echo '<td>'.$row['date'].'</td>';
echo '<td>Сокращенный день</td>';
}
}
if( $row_days['off_id'] !== 0 && $row_days['off_id'] !== 1 ){ // остальные дни
$sub_hours=(int) $row['sub_hours'];
$sub_hours=$sub_hours - 8;
if( $sub_hours>=8){
echo '<td>'.$row['user_id'].'</td>';
echo '<td>'.$row['name'].'</td>';
echo '<td>'.$sub_hours.'</td>';
echo '<td>'.$row['date'].'</td>';
echo '<td>Другой день</td>';
}
}
}
else{
echo '<td>'.$row['user_id'].'</td>';
echo '<td>'.$row['name'].'</td>';
echo '<td>Добавьте дэйоф</td>';
echo '<td>'.$row['date'].'</td>';
echo '<td>Добавьте дэйоф</td>';
}
}
echo '</tr>' ;
}
?>
</table>
есть 2 таблицы , в первой даты и часы , во второй даты и id
если дата из первой таблицы совпадает с датой со второй , смотрим на id второй таблицы.
Далее в зависимости от id (есть 0 и 1 в $row_days['off_id'] ) делаем математические операции. Если дата есть только в первой таблице , но нет во второй делаем математику сразу.
И все бы хорошо но вот это "сразу" у меня идет дублями , откуда они берутся кто скажет тому пол царства и принцесса ))
то есть если совпадение найдено по дате то проблем нет, а если не найдено , цикл их дублирует 3 раза