1

total_time1呼ばれる他の2つのフィールドからを計算するクエリを作成しました。time_intime_outtimediff(time_out, time_in) AS total_time1

さて、その時間を通常ではなくより良い形式に変換したいhh:mm:ssので、同じクエリで実行しましたDATE_FORMAT(total_time1, '%l:%i') AS total_time2が、何らかの理由で、新しい時刻を入力および入力するたびに機能しません。

これはクエリです:

$sql="SELECT 
        DATE_FORMAT(time_in, '%l:%i %p') AS time_in,
        DATE_FORMAT(time_out, '%l:%i %p') AS time_out,
        timediff(time_out, time_in) AS total_time1,
        DATE_FORMAT(total_time1, '%l:%i') AS total_time2,
      FROM $table";

$result = $mysqli->query($sql);

while($row = $result->fetch_array()){
    <td><?php echo $row['time_in']; ?></td>
    <td><?php echo $row['time_out']; ?></td>
    <td><?php echo $row['total_time1']; ?></td>
    <td><?php echo $row['total_time2']; ?></td>
}

自分のページの大きなテーブルにすべて(タイムアウト、合計時間1、合計時間2を含む)を表示しています。total_time1私が言ったように動作しますが、total_time2何も表示されません。エラーなどはありません。私はここで何を間違っているのですか。

4

2 に答える 2

3

同じクエリで作成したエイリアスを使用することはできません

このようにもう一度書く必要があります

$sql="SELECT 
        DATE_FORMAT(time_in, '%l:%i %p') AS time_in,
        DATE_FORMAT(time_out, '%l:%i %p') AS time_out,
        timediff(time_out, time_in) AS total_time1,
        DATE_FORMAT(timediff(time_out, time_in), '%l:%i') AS total_time2
      FROM $table";

また、時間をフォーマットしたい場合は、

使用するべきではなくDATE_FORMATTIME_FORMAT代わりに

このような

$sql="SELECT 
            TIME_FORMAT(time_in, '%l:%i %p') AS time_in,
            TIME_FORMAT(time_out, '%l:%i %p') AS time_out,
            timediff(time_out, time_in) AS total_time1,
            TIME_FORMAT(timediff(time_out, time_in), '%l:%i') AS total_time2
          FROM $table";

MySQLのすべての日付と時刻の関数に関するドキュメントは次のとおりです

于 2012-11-19T16:01:00.323 に答える
0

列を自己参照することはできません。また、余分なコンマがありましたが、これはタイプミスだと思います。

次のようなものが必要です。

$sql="SELECT time_in, time_out, total_time1, DATE_FORMAT(total_time1, '%l:%i') AS total_time2
FROM (SELECT 
        DATE_FORMAT(time_in, '%l:%i %p') AS time_in,
        DATE_FORMAT(time_out, '%l:%i %p') AS time_out,
        timediff(time_out, time_in) AS total_time1
      FROM $table) a";
于 2012-11-19T16:02:16.187 に答える