-1

タスクの startTime、endTime、および実行頻度 (everyMinutes) を持つデータベースがあります。

このデータをphpに取り込み、ループを使用してすべての予想時間を別のテーブルに書き込みます。問題は、タスクの開始時刻00:00:00と終了時刻23:59:00です。機能的には、これは終日実行されることを意味します。everyMinutesが 15 の場合、 で開始し00:00:00、 で再び実行され00:00:15ます。

以下の私のコードの問題は、どちらが小さいかという$latestRunTimeことです。そのため、もう一度繰り返します。ただし、ループの最後よりも大きくなる代わりに、元に戻り、無限ループに陥ります。どうすればこれを軽減できますか?23:45:00$endTime$endTime00:00:00

$getTaskDetailQuery = "SELECT taskID, startTime, endTime, everyMinutes FROM frequencyTable WHERE everyMinutes != '00:00:00' ORDER BY taskID ASC";
$stmt = sqlsrv_query($conn, $getTaskDetailQuery);
if($stmt === FALSE){
    die(print_r(sqlsrv_errors(), true));
}
$insertQueryMulti = "INSERT INTO exactTimeScheduleTable (taskID, expectedTime) VALUES (?, ?)";
while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)){
    $taskID = $row['taskID'];
    $startTimeRaw = $row['startTime'];
    $endTimeRaw = $row['endTime'];
    $everyMinutesRaw = $row['everyMinutes'];
    $startTime = $startTimeRaw->format('H:i:s');
    $endTime = $endTimeRaw->format('H:i:s');
    $everyMinutes = $everyMinutesRaw->format('H:i:s');
    $secs = strtotime($everyMinutes)-strtotime("00:00:00");
    $latestRunTime = date("H:i:s",strtotime($startTime));
    while ($latestRunTime < $endTime){
        $timeToInsertRaw = strtotime($latestRunTime);
        $dataForInsert = array($taskID,$latestRunTime);
        $execute = sqlsrv_query($conn, $insertQueryMulti, $dataForInsert);
        $latestRunTime = date("H:i:s",strtotime($latestRunTime)+$secs);
    }
}
4

2 に答える 2

2

これをwhileループ内の最後の行として追加するだけです:

if($latestRunTime == "00:00:00") break;
于 2013-04-23T15:48:02.197 に答える