名前、ACNo、日付、時刻、状態、例外の 6 つの列を含むテーブル「dtr」があります。
Name | ACNo. | Date | Time | State | Exception|
-------------+-------+-----------+--------------+------------+----------+
Johnny Starks| 1220 | 5/13/2013 | 11:45:18 PM | Check In | OK |
Johnny Starks| 1220 | 5/14/2013 | 12:46:58 AM | Out | Out |
Johnny Starks| 1220 | 5/14/2013 | 12:52:41 AM | Out Back | Out |
Johnny Starks| 1220 | 5/14/2013 | 02:12:50 AM | Out | Out |
Johnny Starks| 1220 | 5/14/2013 | 02:43:11 AM | Out Back | Out |
Johnny Starks| 1220 | 5/14/2013 | 05:46:58 AM | Out | Out |
Johnny Starks| 1220 | 5/14/2013 | 06:22:41 AM | Out Back | Out |
Johnny Starks| 1220 | 5/14/2013 | 06:55:12 AM | Check Out | OK |
Johnny Starks| 1220 | 5/14/2013 | 11:47:13 PM | Check In | OK |
Johnny Starks| 1220 | 5/15/2013 | 12:36:28 AM | Out | Out |
Johnny Starks| 1220 | 5/15/2013 | 12:59:11 AM | Out Back | Out |
Johnny Starks| 1220 | 5/15/2013 | 03:12:54 AM | Out | Out |
Johnny Starks| 1220 | 5/15/2013 | 03:33:31 AM | Out Back | Out |
Johnny Starks| 1220 | 5/15/2013 | 06:55:12 AM | Check Out | OK |
したがって、以下のコードを使用して結果として取得したいのは...またはループで実行したいシーケンスです..
最初のループで - 1回のチェックインを取得し、2番目のループに移動します - チェックインとチェックアウトを取得した後にチェックアウトを取得します..3番目/最後のループに移動します - これは1 番目と 2 番目のループの結果の範囲を使用して、Breaks (Out Exception のあるもの) を取得します。
私はこれを行っているので、すべての1シフト(チェックインからチェックアウトまでの範囲)でアウトとアウトブレイクのすべてのペアを計算できます。その後、1 シフトの休憩の合計分数/時間を計算できます。
日付を介したシフトの範囲に基づくことはできません。その場合、他の休憩は、休憩日と同じチェックイン日を持つ他の/次のシフトにあり、適切に計算したり、休憩のすべてのペアを数えたりすることはできません.
しかし、私はそれを正しくすることができないようです。正しい結果を得るにはどうすればよいですか? またはループを正しくする...
<?php
include 'connection.php';
$checktime='';
$outtime = '';
$isql = mysql_query("Select * from dtr where ACNo = '1220' and
State = 'Check In'") or die(mysql_error());
while($irow = mysql_fetch_array($isql)){
$iID = $irow['ACNo'];
$iDate = $irow['Date'];
$iTime = $irow['Time'];
$iState = $irow['State'];
if($iState == 'Check In'){
$checktime = $iTime;
$indate = $iDate;
}
$osql = mysql_query("Select * from dtr where ACNo = '1220' and
State = 'Check Out'") or die(mysql_error());
while($orow = mysql_fetch_array($osql)){
$oID = $orow['ACNo'];
$oDate = $orow['Date'];
$oTime = $orow['Time'];
$oState = $orow['State'];
if($oState == 'Check Out'){
$outtime = $oTime;
$outdate = $oDate;
}
$bsql = mysql_query("select * from dtr where Exception = 'Out' And Time Between
'$checktime' and '$outtime'")or die(mysql_error());
while($brow = mysql_fetch_array($bsql)){
$bID = $brow['ACNo'];
$bDate = $brow['Date'];
$bTime = $brow['Time'];
$bState = $brow['State'];
echo $bDate.' - ';
echo $bTime.' ';
echo $bState.'<br>';
}
}
}
?>
編集:要求どおり..私が期待または望んでいた出力は次のようになります...
5/13/2013 | 11:45:18 PM | Check In
5/14/2013 | 12:46:58 AM | Out
5/14/2013 | 12:52:41 AM | Out Back
5/14/2013 | 02:12:50 AM | Out
5/14/2013 | 02:43:11 AM | Out Back
5/14/2013 | 05:46:58 AM | Out
5/14/2013 | 06:22:41 AM | Out Back
5/14/2013 | 06:55:12 AM | Check Out
Break Count : 3
Total Mins Of Break: [total here]
5/14/2013 | 11:47:13 PM | Check In
5/15/2013 | 12:36:28 AM | Out
5/15/2013 | 12:59:11 AM | Out Back
5/15/2013 | 03:12:54 AM | Out
5/15/2013 | 03:33:31 AM | Out Back
5/15/2013 | 06:55:12 AM | Check Out
Break Count : 2
Total Mins Of Break: [total here]