Com a necessidade de somar todas as horas de uma coluna de um banco do tipo TIME resolvi procurar no google como fazer o mesmo. Cheguei então ao seguinte link : http://forum.wmonline.com.br/lofiversion/index.php/t176750.html
Nele contém um post informando que com este comando resolveria:
mysql_query("SELECT SEC_TO_TIME( SUM( TIME_TO_SEC( nome_campo ) ) ) AS total_horas FROM nome_tabela");
No inicio parecia que tinha resolvido mas com o passar do tempo e aumento do volume de horas cadastradas ocorreu um problema. Os campos do tipo TIME possui o limite de 838:59:59, então se a soma do total de horas da coluna ultrapassar este valor, ele sempre retorna este total que é o limite, logicamente.
Para resolver este problema resolvi fazer um script PHP que vou disponibilizar aqui pra você.
Primeiro crie uma tabela:
CREATE TABLE `horas` ( `idhora` int(11) NOT NULL auto_increment, `horas` time NOT NULL, PRIMARY KEY (`idhora`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=219 ;
Então insira dados na coluna até que a soma dos mesmos ultrapasse 838:59:59
INSERT INTO `horas` (`idhora`, `horas`) VALUES (1, '23:59:25');
Então teste o resultado com o script abaixo:
<?php
# Conecta com banco
# Base: http://www.php.net/manual/pt_BR/function.mysql-fetch-array.php
mysql_connect('localhost', 'root', '') or die('Não foi possível conectar: ' . mysql_error());
mysql_select_db('temp') or die('Não foi possível conectar: ' . mysql_error());
#Faz a soma das horas e retorna em segundos em $d->total;
$sql = 'SELECT SUM(TIME_TO_SEC(horas)) AS total FROM horas';
$result = mysql_query($sql);
$d = mysql_fetch_object($result);
# Faz calculos de dias horas minutos e segundos
# Base em: http://scriptbrasil.com.br/forum/index.php?showtopic=91365
$dias = floor( $d->total / (60*60*24) );
$d->total = ($d->total % (60*60*24));
$horas = floor( $d->total / (60*60) );
$d->total = ($d->total % (60*60));
$minutos = floor($d->total / 60);
$d->total = ($d->total % 60);
$segundos = $d->total;
# Mostra o resultado na tela
print $dias.' dias '.$horas.':'.$minutos.':'.$segundos;
?>