在pdo select中编辑列

时间:2013-09-17 19:53:56

标签: php arrays

我有一个以秒为单位的列,我需要在Minutes:seconds中对其进行格式化,我认为我需要遍历已获取的数组但不太确定如何进行该操作。

$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; 
}     

?>

3 个答案:

答案 0 :(得分: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得到分钟组件,然后将余数连接到它。

如果您需要定期获取此数据(即您将要执行此查询),最好将此计算字段实际存储在记录中,这样您就不需要进行计算了。查询数据。只需对每个记录插页进行计算。

答案 1 :(得分:0)

我建议一次取一行而不是将它们全部取出到数组中:

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

如果你想将它们全部提取到一个数组中,你可以使用PHP的foreach

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

foreach ($dblist as $dbrow) {
  // process current row
}

答案 2 :(得分: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在his answer中指定的那样。