Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá,
tenho um sistema em PHP que utiliza TXT omo banco de dados e agora resolvi migrar ele pra MySQl, já criei um sistema que converto os dados dos arquivos TXT e grava em duas tabelas MySQL, agora estou com uma dúvidacom relação a consulta.
Primeiramente os campos das tabelas...
Tabela com frequências:
cvs_tps
'idtps', 'inisat', 'freq', 'pol', 'sr', 'fec', 'sis', 'modula', 'piloto', 'cobre', 'sinal', 'idemis', 'obs', 'inf', 'tipo', 'tipo2', 'codif', 'compres', 'cor', 'definicao', 'formato', 'a3d', 'vpid', 'apid', 'pcr', 'trans', 'alterou', 'colaborador', 'data', 'user', 'apv'
Tabela com emissoras:
cvs_emi
'idemi', 'nome', 'logo', 'idioma', 'origem', 'site', 'aovivo', 'programacao', 'emitipo'
No sistema, as frequências são diferenciadas pelo que elas transmitem, cada tipo de transmissão possui um código
RADIO - 9
CANAL DO PACOTE - 5
PACOTE - 2
TV - 1
A consulta lista todas as TVs e pacotes, porém quando é RADIO ou CANAL DO PACOTE ele só mostra quando eles possuem o campo 'codif' vazio. até aqui tudo bem, consegui fazer uma consulta que verifica se é RADIO, CANAL DO PACOTE, PACOTE ou TV e em seguida verifica o campo 'codif', exibindo somente a RADIO ou CANAL DO PACOTE que estão com este campo vazio e sempre exibindo PACOTE ou TV.
Colsulta:
SELECT cvs_tps.*, cvs_emi.idemi, cvs_emi.nome
FROM cvs_tps
INNER JOIN cvs_emi ON cvs_tps.idemis=cvs_emi.idemi
WHERE inisat=".$sat." AND (cvs_tps.tipo <= '4' OR (cvs_tps.tipo > '4' AND cvs_tps.codif='FTA')) ORDER BY cvs_tps.freq ASC, cvs_tps.pol ASC, cvs_tps.tipo ASC, cvs_tps.vpid ASC, cvs_tps.apid ASC
Agora vem o problema, no caso do PACOTE de TV, quando elas tem uma emissora de RADIO (nas TVs e Pacotes) ou CANAL DO PACOTE com a mesma frequência, gostaria que ao exibir a data de atualização, ele procurasse somente a data mais recente, por exemplo:
Existem vários cadastros com a frequência com suas datas de atualização
11777 - PACOTE - 10/12/2012
11777 - CANAL DO PACOTE - 13/12/2012
11777 - CANAL DO PACOTE - 10/12/2012
11777 - RADIO - 16/12/2012
Atualmente, ao fazer a consulta mostra-se no PACOTE, a data da atualização do pacote, que seria 10/12/2012, será que é possível na mesma consulta que citei acima, no caso de PACOTE, mostrar a data mais recente da atualização nesta frequência, no exemplo citado seria 16/12/2012 ao invés da data do pacote?
Eu só consegui fazer isto utilizando uma segunda consulta quando chega na hora de mostrar a data e com o auxílio de um IF no PHP, mas infelizmente isto mais dobra o tempo de processamento da página, de 0,032 para 0,071 segundos (testado no meu PC).
if($colu['tipo']=="2"){
$query2 = mysql_query("SELECT cvs_tps.inisat, cvs_tps.freq, cvs_tps.pol, cvs_tps.alterou, cvs_tps.colaborador, cvs_tps.data FROM cvs_tps WHERE inisat='".$colu['inisat']."' AND freq='".$colu['freq']."' AND pol='".$colu['pol']."' ORDER BY data DESC LIMIT 1");
while($colu2 = mysql_fetch_array($query2)){
echo $colu2['alterou']." ".
$colu2['colaborador']." ".
$colu2['data']." ";
}
} else {
echo $colu['alterou']." ".
$colu['colaborador']." ".
$colu['data']." ";
}
Como estou iniciando esta construção do código em MySQL, nem sei se é possível fazer isto, pesquisei no Google, mas não encontrei nada parecido...
Ah, talvez olhando o código da minha primeira consulta, talvez possam também analizar e dar algumas dicas.
Obrigado desde já!
Carregando comentários...