sql循环只返回一个结果

内塔

我正在执行三重循环以在数组 (dataArray[]) 上插入值。

  • 第一个,寻找工人
  • 第二个是一周中每一天的“for”
  • 最后一个看看这个人今天是否工作。

我不知道为什么它只显示 1 个结果...。如果我更改顺序(第一个 $sql),它会显示另一个条目。

            // display loop
            $sql    =   "SELECT workers.id, workers.surname, workers.name 
            FROM workers,employment_contract 
            WHERE employment_contract.fk_company_teams_id='".$teamID."' 
            AND employment_contract.fk_workers_id=workers.id 
            AND employment_contract.initial_date<'".$beginingDate."' 
            AND (employment_contract.final_date>".$beginingDate." 
            OR employment_contract.final_date='0000-00-00-00:00:00')
            ORDER BY workers.surname ASC";
            $stmt       =   $db->prepare($sql);
            $i=-1;
            $dataArray;
            if($stmt->execute()){
                while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                    $i++;
                    // datas in array
                    $nameInitial    =   substr($row['name'], 0, 1).'.';
                    // inserting worker name on array
                    $dataArray[$i]['workerName']=$nameInitial.' '.$row['surname'];

                    $workerID   =   $row['id'];
                    $totalTime  =   new DateTime('0000-00-00 00:00:00');
                    for($j=0;$j<7;$j++){
                        // changing the current date
                        $incrementation =   'P'.$j.'D';
                        $currentDate = date_create($beginingDate);
                        $currentDate->add(new DateInterval($incrementation));
                        $currentDate =   date_format($currentDate, 'Y-m-d');

                        // sql search for daily timesheet
                        $sql    =   "SELECT initial_date,final_date 
                        FROM working_days 
                        WHERE fk_workers_id='".$workerID."' 
                        AND (initial_date >='".$currentDate." 00:00:00.000')
                        AND (final_date <='".$currentDate." 23:59:59.999')
                        ORDER BY id ASC";
                        $stmt       =   $db->prepare($sql);
                        $k=1;
                        if($stmt->execute()){
                            while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
                                // formatting date for calculation
                                $time1 = utf8_encode(strftime("%R",strtotime("$row[initial_date]")));
                                $time2 = utf8_encode(strftime("%R",strtotime("$row[final_date]")));
                                $initialDate    =   new DateTime(date($row['initial_date']));
                                $finalDate      =   new DateTime(date($row['final_date']));
                                $time3 = $initialDate->diff($finalDate);
                                $timeFormatted  =   $time3->format('%H:%I');
                                $totalTime->add($time3);

                                // setting the day to implement
                                if($j==0){$day  =   'monday';}
                                if($j==1){$day  =   'tuesday';}
                                if($j==2){$day  =   'wednesday';}
                                if($j==3){$day  =   'thursday';}
                                if($j==4){$day  =   'friday';}
                                if($j==5){$day  =   'saturday';}
                                if($j==6){$day  =   'sunday';}
                                $arrayBox   =   $day.$k;

                                // inserting day value on array
                                $dataArray[$i][$arrayBox]   =   $time1.' '.$time2.' <b>'.$timeFormatted.'</b></div><br>';
                                unset($time1);
                                unset($time2);
                                $k++;
                            }
                        }
                    }
                    $totalTimeFormatted =   $totalTime->format('H:i');
                    // inserting holidays value on array
                    $dataArray[$i]['holidays']  =   'Vac';
                    // inserting sum value on array
                    $dataArray[$i]['sum']       =   $totalTimeFormatted;
                    // if no timesheet is found for the worker we don't show anything
                    if($totalTimeFormatted==='00:00'){
                        unset($dataArray[$i]);
                    }
                    unset($totalTime);
                }
            }

我认为我的日期 (dateTime) 计算效率不高,但这不是问题所在。

内塔

正如评论中提到的,我对 sql 语句 $stmt 使用了相同的变量名。

我在第三个循环中将其更正为 $stmt1 并且它正在工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章