我正试图在数据库中创建签入/签出表。我的签入表单可以正常工作,将时间插入我的数据库。当我想退房时,问题就出现了。一开始一切都很好…
php - 需要计算入住和退房时间之间的总小时数-LMLPHP
但是当我试图再次办理入住和退房时…
php - 需要计算入住和退房时间之间的总小时数-LMLPHP
到目前为止还不错,但是当我退房的时候…
php - 需要计算入住和退房时间之间的总小时数-LMLPHP
目前,我的代码更新所有匹配的outtotalTime列和child_id列。
这是我的代码:

// Select the correct child from the database
$sql_childID = "SELECT id FROM child
                WHERE firstName = '$childFirstName'
                AND lastName = '$childLastName'";
$result = $pdo->query($sql_childID);
$row = $result->fetch();
$var = $row['id'];

// Insert the check out time for the child
$query = "UPDATE checkinout
        SET `out` = :nowTime
        WHERE child_id = $var
        AND `in` IS NOT NULL";
$statement = $pdo->prepare($query);
$statement->bindValue(':nowTime', date("YmjHis"));
$statement->execute();

// Select check in time for specified child
$sql_inTime = "SELECT `in` FROM checkinout
        WHERE child_id = $var";
$inResult = $pdo->query($sql_inTime);
$inRow = $inResult->fetch();
$inTime = strtotime($inRow['in']);

// Select the check out time for specified child
$sql_outTime = "SELECT `out` FROM checkinout
        WHERE child_id = $var";
$outResult = $pdo->query($sql_outTime);
$outRow = $outResult->fetch();
$outTime = strtotime($outRow['out']);

// Find total hours
$totalTime = abs($outTime - $inTime)/(60*60);

// Update totalHours column for specified child
$queryTotalTime = "UPDATE checkinout
                SET totalTime = :totalTime
                WHERE child_id = $var
                AND 'out' IS NOT NULL";
$statement = $pdo->prepare($queryTotalTime);
$statement->bindValue(':totalTime', $totalTime);
$statement->execute();

最佳答案

我认为您可以在第一个update语句中使用TIMESTAMPDIFF来完成所有这些操作,而不是计算使用php的总时间:

UPDATE checkinout
SET
    out = NOW(),
    totalTime = TIMESTAMPDIFF(SECOND, `in`, NOW()) / 3600
WHERE
    child_id = $var
    AND out IS NULL

条件WHERE out IS NULL将只更新尚未在out列中有值的行。

09-19 00:24