0

秒単位の列があり、分:秒でフォーマットする必要があります。取得した配列をループする必要があると考えていますが、その方法についてはよくわかりません。

$query = 'SELECT calldate,recordingfile,uniqueid,clid,did,lastapp,dst,disposition,duration FROM cdr'; 
$sql = $remotedbh->prepare($query);  
$sql->execute(); 
$dblist = $sql->fetchAll(PDO::FETCH_ASSOC); 

while($row -)


if($sql->rowCount() > 0){ 
    header('Content-type: application/json');
    echo json_encode($dblist); 
} 
else {
    echo 0; 
}     

?>
4

3 に答える 3

3

クエリ自体の値を変更することをお勧めします。ここに例があります

SELECT calldate,
recordingfile,
uniqueid,
clid,
did,
lastapp,
dst,
disposition,
duration,
CONCAT(FLOOR(duration/60),':',LPAD((duration % 60), 2, '0')) AS duration_in_mins_and_secs
FROM cdr

ここでは、期間が変更するフィールドであると想定しています。単純に期間を 60 で割って分のコンポーネントを取得し、残りをそれに連結しています。

このデータが定期的に必要な場合 (つまり、このクエリを頻繁に実行する場合)、この計算フィールドを実際にレコード自体に格納して、データのクエリ時に計算をまったく行う必要がないようにすることをお勧めします。 . レコードを挿入するたびにこの計算を行うだけです。

于 2013-09-17T20:24:53.503 に答える
0

すべてを配列にフェッチするのではなく、一度に 1 行ずつフェッチすることをお勧めします。

while ($dbrow = $sql->fetch(PDO::FETCH_ASSOC)) {
   // process current row
}

それらをすべて 1 つの配列にフェッチしたい場合は、PHP の を使用できますforeach

$dblist = $sql->fetchAll(PDO::FETCH_ASSOC); 

foreach ($dblist as $dbrow) {
  // process current row
}
于 2013-09-17T20:18:45.160 に答える
0

次のコードは、期間を次の形式でM:Sフォーマットします。

while ($row = $sql->fetch(PDO::FETCH_ASSOC)) {
    $dur = $row["duration"];
    $min = $sec = 0;
    if (floor($dur / 60) > 0) {
        $min = floor($dur / 60);
        $sec = $dur % 60;
    }
    else {
        $sec = $dur;
    }
    $str = $min . ":" . $sec;
}

ただし、Mike Brantが answerで指定しているように、データベースで出力をフォーマットすることをお勧めします。

于 2013-09-17T20:27:51.757 に答える