Pichok 1 Denunciar post Postado Maio 8, 2014 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
lokaodomau 61 Denunciar post Postado Maio 8, 2014 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
Pichok 1 Denunciar post Postado Maio 9, 2014 Resolvido: Eu apenas criei um index, obrigado :D indice" Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Maio 9, 2014 Mas continua executando este número exagerado de querys? Compartilhar este post Link para o post Compartilhar em outros sites