Ae galera estou postando aqui no guj, apesar do assunto não ser java, pq o pessoal sempre foi muito conciso e prestativo.
Tenho um sistema em php, controle de acesso de onibus, estou no começo ainda, que deverá exibir um relatorio com as totalizações usuarios em um determinado dia. Estes dados serão agrupados por linha, carro e cobrador. Necessito selecionar os totais de Vale tranporte, gratuito, estudante e etc.
A principio criei esta query:
select r.linha, r.carro,
(select rv.pass from reg rv join tipo t on t.tipo = r.tipo where rv.dataf = '2010.09.17' and t.class = 'VT' and rv.linha = r.linha) as VT,
(select rg.pass from reg rg join tipo t on t.tipo = r.tipo where rg.dataf = '2010.09.17' and t.class = 'GRA' and rg.linha = r.linha) as GRA,
(select re.pass from reg re join tipo t on t.tipo = r.tipo where re.dataf = '2010.09.17' and t.class = 'EST' and re.linha = r.linha) as EST,
(select rc.pass from reg rc join tipo t on t.tipo = r.tipo where rc.dataf = '2010.09.17' and t.class = 'COM' and rc.linha = r.linha) as COM,
(select rs.pass from reg rs join tipo t on t.tipo = r.tipo where rs.dataf = '2010.09.17' and t.class = 'SUB' and rs.linha = r.linha) as SUB,
(select rp.pass from reg rp join tipo t on t.tipo = r.tipo where rp.dataf = '2010.09.17' and t.class = 'PRE' and rp.linha = r.linha) as PRE,
(select rl.lib from reg rl join tipo t on t.tipo = r.tipo where rl.dataf = '2010.09.17' and t.class = 'LIB' and rl.linha = r.linha) as LIB,
(select ri.pass from reg ri where ri.dataf = '2010.09.17' and ri.pass=1 and ri.sts=2 and ri.linha = r.linha) as ITG
from reg r
where r.dataf = '2010.09.17'
group by r.linha, r.carro
order by r.linha, r.carro
Ela faz exatamente o que eu preciso, porem, demora uns 5min. para ser executada.
Uma outra opção, que em função do tempo é viavel, seria fazer estas pesquisas separadamente, depois junta-las e exibir o relatorio. É exatamente nesse ponto que mora meu problema, na hora de juntar essas querys, eu tenho que agrupa-las por linha e carro em cada tipo (estudante, gratuito, etc), ou seja, criar um novo array que será a união de todos os outros. Um outro detalhe, é que nem todas as linhas, possuem movimento de todos os tipos de cartão, então algumas querys retornam linhas que as outras não.
Não tenho a menor ideia de como fazer.
Alguem poderia dar uma luz?
Muito obrigado.