Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 237
Localização: Florianópolis/SC
Contato:

combobox otimizado para melhor desempenho

16-11-2008 03:18

Bom, tenho um combobox, daqueles tipo, escolhe o estado, ai em outro é gerado as cidades no meu tbm qdo escolhe a cidade é completado outro select com os bairros.

Então o bd tem 27estados, quase 4mil cidade e +/- 37mil bairros (banco de dados do correio de 2004).

Vários visitantes deverão selecionar seu bairro, entao no combo já gera uma consulta ao bd pra listar os estados, então a pessoa seleciona o estado, ai outra consulta em 4mil registros pra saber quais cidades pertencem aquele estado, por ultimo, escolhe a cidade, outra consulta em 37mil registros pra ver quais pertencem a cidade escolhida.

Muitas cidades do Brasil só tem um bairro, centro. Então gera toda esta consulta pra retornar apenas um resultado!!!

Publiquei este artigo de popular combobox com jQuery. http://www.codigosnaweb.com/forum/viewt ... f=3&t=2604


Li um artigo sobre TEMP, funciona +/- assim, qdo muitas consultas ao bd são executadas de forma idêntica, pode ser criado um arquivo TEMP (atualizado de tempo em tempo) com os resultados desta consulta.


Então deixo aqui a dica de como fazer para que o combobox com tanta informação seja em rapido.



o que deve ser feito é o seguinte, crie um script que gere arquivos .html, .php ou ate .txt com o seguinte conteúdo
<option id="opcoes" value="xxx1">-- yyyyy2 --</option>
<option id="opcoes" value="xxx2">-- yyyyy2 --</option>
<option id="opcoes" value="xxx3">-- yyyyy3 --</option>

Não é necessário ser assim com quebras de linha.
*Vou usar como exemplo o esquema de estado=>cidade=>bairro.

nomeie o arquivo como estado_xx.html (xx pode ser a sigla ou o id que o estado ocupa no seu banco de dados - recomendo usar um ID por causa de erros com acentuação)ex.

estado_15.html (15=SP)
<option id="opcoes" value="1"> Adamantina</option>
<option id="opcoes" value="2"> Adolfo</option>
<option id="opcoes" value="3"> Agisse</option>
...
<option id="opcoes" value="275"> São Paulo</option>
...


se baseando no artigo que citei anteriormente, altere de forma que quando o visiante selecionar o estado SP, seja carregado o arquivo estado_15.html dentro do select cidade.
use uma pagina para cada estado, com todas as cidades deste estado listado na forma de <option value="cidade x">cidade x <option>

Nesta brincadeira ja economizamos uma consulta em 4mil registros.
agora fazemos o mesmo pros bairros


cidade_275.html (275= cidade de São Paulo no estado 15=SP)
<option id="opcoes" value="254"> Aclimação</option>
<option id="opcoes" value="657"> Água Branca</option>
<option id="opcoes" value="8965"> Água Fria</option>
...
<option id="opcoes" value="58746">Pinheiros</option>
...


Entenderam a lógica?

Neste caso, qdo a pessoa seleciona o estado, a função AJAX já sabe qual arquivo buscar e vai adicionar o <option> dentro do <select name=cidade>

Quando a pessoa escolhe a cidade, a função AJAX já sabe qual arquivo buscar e vai adicionar o conteúdo <option> dentro do <select name=bairro>


entao o AJAX buscou dois arquivos que ja existem, e inseriu o conteudo que ja esta no formato <option.....> dentro do <select>
Não gerou nenhuma consulta ao banco de dados, o carregamento vai ficar muito mais rapido pois o AJAX tendo o endereço, ja vai direto na pagina requisitada, esta pagina ja esta pronta, no instante ja começa a inserir o valor da mesma. Diferente da consulta php, onde precisa aguardar a resposta do servidor que esta processando a consulta.

Imaginem um site com vários acessoas, se em certo momento tiverem 5 consultas simultaneas, como existem +/- 37mil bairros, 5x37mil = 185mil vezes foram lidos os registros no banco de dados. ah, existem quase 10mil cidades,. 5x10mil = 50mil + 185mil = 235mil registros foram lidos.

a parte mais dificil desta lógica, parece ser criar as paginas com as cidade e os bairros, mas com alguns minutos é possivel criar uma pagina .php que consulte o banco de dados, seleciones os estados, verifique as cidades deste estado e crie o arquivo com as cidades, depois se repete pros outros estados, o mesmo script faz o processo de criar a pagina com os bairros de cada cidade.

ah, serão geradas 10mil paginas, uma pra cada cidade, mas muitas só tem um bairro, e é apenas arquivo texto, serão arquivos com muito poucos bytes. e só ocuparão espaço fisico no servidor e a transferencia de informação será bem mais baixa do que as de consulta mysql.
0
MIDZ.com.br
http://www.midz.com.br
Soluções Web
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17721
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

combobox otimizado para melhor desempenho

16-11-2008 10:09

Bem legal, eu acho até que o phpBB3 usa essa base, porque assim, em uma consulta são retornados resultados, por exemplo, uma lista de produtos de algum usuário. Eu até acho que pode ser feito assim, você faz uma consulta, por exemplo, no seu caso vai listar todas as cidades de SP. Isso vai gerar uma lista de cidades

bla
ble
bli
blo
blu
....

Ai nesse select vai ser criado o HTML com essa lista

cidades_SP.html

Ai, quando o cara for fazer a consulta usa-se um if para verificar se o arquivo já existe, se já, retorna o arquivo, se não, faz a única pesquisa que já irá gerar o cidades_SP.html, ai toda vez que entrar não precisará fazer a consulta novamente.

MOVIDO: de Javascript, XML e AJAX para MySQL
0
A melhor hospedagem para o seu site HostGator!
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17721
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

combobox otimizado para melhor desempenho

16-11-2008 10:30

Coloquei a mão na massa para ajudar nessa otimização, acho que até já postei isso no fórum, mas, vou postar novamente.

O objetivo do script é:
- Fazer uma consulta, essa consulta irá retornar os resultados, e criar um html a partir dos mesmos, esses resultados serão armazenados em um .html, que quando criado irá ser incluído ao invés de fazer uma nova consulta.

Os detalhes de uso seguem no script.

<?php
$conexao = mysql_connect("localhost", "login", "senha") or die(mysql_error());
$db = mysql_select_db("bd");

// abaixo é o seguinte, a consulta é com base nos usuários de minha tabela
// com isso vai ser criado usuarios.html, para ter a listagem de usuários já feita
$alvo = "usuarios";

if(file_exists($alvo.".html")) {
include($alvo.".html");

} else {

$caminho = fopen($alvo.".html", "w+");
$conteudo = "";

// abaixo segue o seu SELECT da consulta, para retornar todos usuários
$selec = "SELECT ...";
$exec = mysql_query($selec, $conexao) or die(mysql_error());
?>

<?php
while($campos=mysql_fetch_array($exec)) {

// aqui é extraído os campos da tabela
extract($campos);

// aqui é escrito no html em cada linha o campo do bd
// para que tenha a listagem já pronta
$conteudo.= "$campo_do_bd<br>\n";

// aqui é mostrado o campo do bd, isso porque quando não tiver sido criado o html
// não ficar sem resultado para mostrar
echo $campo_do_bd."<br>";
}

// aqui é finalizado a escrita no arquivo .html
fwrite($caminho, $conteudo);
}
?>
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 237
Localização: Florianópolis/SC
Contato:

combobox otimizado para melhor desempenho

16-11-2008 10:50

puxa, bem isto.
E com este esquema de verificação, pode ser criado um arquivo para muitas coisas, alguns menus com submenus que são constuidos baseados em artigos que estao em bancos de dados, tbm seria util.

Diminui muito as consultas ao bd, reduzindo consideravelmente o trafego no servidor.
0
MIDZ.com.br
http://www.midz.com.br
Soluções Web
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17721
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

combobox otimizado para melhor desempenho

16-11-2008 11:09

Isso ai :;)
0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado