Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Pichok

Repeat sobrecarregado

Recommended Posts

Então galera,

eu estou fazendo algumas consultas ao banco de dados e a minha página não esta carregando

 

abaixo o código:

$informada = 0;

do {
		
mysql_select_db($database_baselocal, $baselocal);
$query_reunioes = "SELECT * FROM tbreuniao WHERE (idclube = $idclube AND dtcadastro >= 2013-07-01)";
$reunioes = mysql_query($query_reunioes, $baselocal) or die(mysql_error());
$row_reunioes = mysql_fetch_assoc($reunioes);
$totalRows_reunioes = mysql_num_rows($reunioes);
$idreunioes = $row_reunioes['idreuniao'];
$preuniao = $totalRows_reunioes;

do {
	
mysql_select_db($database_baselocal, $baselocal);
$query_frequencia = "SELECT * FROM tbpresencas WHERE id_reuniao = $idreunioes";
$frequencia = mysql_query($query_frequencia, $baselocal) or die(mysql_error());
$row_frequencia = mysql_fetch_assoc($frequencia);
$totalRows_frequencia = mysql_num_rows($frequencia);
			
if($totalRows_frequencia > 0) { $informada += 1; }			

} while ($row_frequencia = mysql_fetch_assoc($frequencia));
				
} while ($row_reunioes = mysql_fetch_assoc($reunioes));
		

Eu tenho 700 registros na tbreuniao e 18.700 na tbpresencas, acho que a página não esta carregando por causa deste número elevado.

 

Alguma dica de outra maneira para fazer isso?

 

É isso realmente que pode estar acontecendo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, é isso que ocorre, e ocorre porque está fazendo 701 consultas no banco de dados, primeiro consultando todas as reuniões, e depois pesquisando uma a uma na outra tabela, quando entender como funciona o JOIN vai ficar impressionado!

 

Bom, primeiro vamos encontrar o relacionamento entre as tabelas, acredito que a tabela tbreunioes possua o campo id, e com base na segunda query sei que existe o campo id_reuniao na tabela tbpresencas, então vamos reduzir o número de consultas para apenas 1:

SELECT * FROM tbreuniao r
LEFT JOIN tbpresencas p ON p.id_reuniao = r.id
WHERE (idclube = $idclube AND dtcadastro >= '2013-07-01')

No resultado virá todas as reuniões juntamente com cada registro da tbpresencas onde o id da tbreuniao existe na tbpresencas (id_reuniao), o detalhe é que os dados da tbreunioes repetem para cada registro correspondente na tbpresencas. Como usei o LEFT JOIN, trará todas as linhas da tbreunioes mesmo que não existam registros na tbpresencas, assim também saberá qual reunião não possui presenca, caso isso não seja necessário, substitua o LEFT JOIN por INNER JOIN. O INNER JOIN traz somente o que possui relacionamento.

 

O comando EXPLAIN também me ajudou a entender e deixar as consultas mais rápidas, nada que dispense o uso de INDEXES.

 

Enfim, espero que isso resolva.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.