0

私はオンラインタイムカードシステムに取り組んでいて、障害に遭遇しました。私がする必要があるのは、各行で、従業員が1日に数回出勤および退勤する可能性のある日付を計算することtimeInですtimeOut。個々の行ではなく、1日全体の合計を見つけるための有効なクエリがあります。データベーステーブルの構造と、見たいものの例をいくつか含めました。

+----+------------+----------+---------+------------------------------+-------------+------------+-----------+----------+
| id | employeeID | date     | timeIn  | jobDescription               | equipType   | unitNumber | unitHours | timeOut  |
+----+------------+----------+---------+------------------------------+-------------+------------+-----------+----------+
|  8 |          1 | 01/15/13 | 7:00 AM | Loaded sand in Jefferson     | Excavator   | 345        |      NULL | 9:30 PM  |
|  9 |          1 | 01/15/13 | 10:00 AM | Loaded sand in Jefferson     | Excavator   | 345        |      NULL | 12:00 PM |
| 10 |          1 | 01/16/13 | 7:00 AM | Loaded sand in Jefferson     | Excavator   | 345        |      NULL | 5:30 PM  |
| 11 |          1 | 01/17/13 | 7:00 AM | Loaded sand in Jefferson     | Excavator   | 345        |      NULL | 5:30 PM  |
| 12 |          1 | 01/18/13 | 8:00 AM | Backfill in Whispering Creek | Skid Loader | 297        |      NULL | 5:30 PM  |
| 13 |          1 | 01/19/13 | 8:00 AM | Backfill in Whispering Creek | Skid Loader | 297        |      NULL | 3:30 PM  |
|  1 |          1 | 01/20/13 | 6:00    |                              | Excavator   | 01E        |      7238 | 17:00    |
|  2 |          1 | 01/21/13 | 6:00    | Worked in Jefferson          | Excavator   | 01E        |      7238 | 17:00    |
|  3 |          1 | 01/22/13 | 6:00    | Worked in Jefferson          | Excavator   | 02E        |      7238 | 17:30    |
|  4 |          1 | 01/23/13 | 6:00    | Worked in Whispering Creek   | Skid Loader | 32SL       |      2338 | 18:30    |
|  5 |          1 | 01/24/13 | 8:00    | Worked in Hubbard            | Scraper     | 54C        |      9638 | 11:30    |
|  6 |          1 | 01/25/13 | 8:00    | Worked in Jefferson          | Dozer       | 4D         |       941 | 19:30    |
|  7 |          1 | 01/26/13 | 8:00    | Pushed Snow                  | Loader      | 950H       |       342 | 20:30    |
+----+------------+----------+---------+------------------------------+-------------+------------+-----------+----------+

さて、私が見たいのは、たとえば、日付が異なる値で01/15/132回表示され、ID 8の行に2:30時間があったことを示す値を取得してから、次のように示す別の値を取得することです。 idが9の行には、2:00時間がありました。可能であれば、1つのクエリでこれを実現したいと思います。timeIntimeOut

これは、一日の時間を取得するための私のクエリです。

SELECT `employeeID`, SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(`timeOut`, `timeIn`))))   AS `totalTime` FROM `timeRecords` WHERE   `date` = "01/15/13"  AND `employeeID` = 1 GROUP BY `employeeID`;
4

2 に答える 2

1

私があなたを正しく理解しているなら、あなたはこれが必要ですか?

SELECT `employeeID`, TIMEDIFF(`timeOut`, `timeIn`)  AS `totalTime` FROM `timeRecords`;

PDO query連想配列の配列として結果セットを返すデータベースをクエリするために使用できます。パフォーマンスを向上させるために、を使用できますPDO prepare/execute

<?php
function getTimeByRow($connection) {
    $sql = "SELECT `employeeID`, TIMEDIFF(`timeOut`, `timeIn`)  AS `totalTime` FROM `timeRecords`";
    foreach ($connection->query($sql) as $row) {
        print $row['employeeID'] . "\t";
        print $row['totalTime'] . "\n";
    }
}
?>
于 2013-01-22T05:18:37.900 に答える
1

したがって、次のようなことをしたいとします。

timeRecordsからemployeeID、date、TIMEDIFF(timeout、timein)を選択します。ここで、date=xおよびemployeeID=y

于 2013-01-22T05:19:37.767 に答える