mrusklon
@mrusklon
Не получается? Яростно гугли!

Почему дублируется код?

длинный скучный 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 раза
  • Вопрос задан
  • 101 просмотр
Решения вопроса 1
irishmann
@irishmann
Научись пользоваться дебаггером
У Вас
if (){
}
if (){
}
if (){
}

попробуйте заменить на
if(){
}
elseif(){
}
elseif(){
}
else{
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы