Ir para conteúdo

Arquivado

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

Carcleo

Consulta sql complicada

Recommended Posts

Ola pessoal.

Estou precisnando de umka forçona de voces:

 

Seguinte.; Tenho 03 tabelas que se envolverão nessa pesquisa. São elas: anunciantes, seguimento e subseguimento.

Gostaria de fazer essa pesquisa da seguinte forma.

 

O usuario digitaria num campo de texto um determinada palavra e depois se faria um select nas tres tabelas e faria uma pesquisa por aproximação tipo:

 

O usuario digita la "jg" e no banco tem la na tabela de anunciantes "J.G. Freitas & Cia Ltda" ou digita Belesa e tm la na tabela de Seguimento o seguimento "Beleza" e o select acha.

 

Depois, caso haja retorno das tres TABELAS ou seja, todas as tres tabelas tenha um ou mais campos que satisfgaçam a pesquisa posso depis com php dar o retornmo para que o usuario possa eascolher na opçao quie quiser.

 

Grato por quialquer ajuda?!

 

Uso Mysql 5 e php 5 e o campo das tabelas são :

 

anunciantes ->nome

seguimento -> titulo

subseguimento-> titulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, pessoal eu pensei em alguma coisa assim:

 

Recebo o que o usuario digiotou no campo de pesquisa,. varro o banco de dados e comparo com o que jka existe no banco.

caso exista alguma coisa parecisa seleciona.

 

Como fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 caminho q conheço é usar variaveis;

(essa variavel será o conteudo do campo - normalmente 1 textfield num formulário -

onde a pessoa digita a palavra a ser pesquisada)

 

a consulta SQL seria algo como:

 

"selecione (campo)

onde (where)

variavel = (campo a ser pesquisado)"

 

obs:

1 - p/ pesquisa por parte do nome use os operadores % e LIKE

2 - p/ pesquisar em várias tabelas você precisa usar JOIN

3 - p/ pesquisar varios campos use AND

 

no link abaixo tem 1 exemplo usando Dreamweaver e ASP,mas você pode tentar adaptar ao PHP, é só p/ você pegar a lógica:

 

http://forum.imasters.com.br/index.php...t&p=1153826

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é uma especie de Guia Comercial que você esta querendo fazer ????

meu msn: meunegocio@meunegocio.com

 

tenho um exemplo... www.guiarondonia.com e www.guiaacre.com.br

 

 

se por exemplo na tabela Anunciante tiver o campo SEGMENTO e SUBSEGMENTO para ser vinculado da para você utilizar o INNER JOIN (onde listara apenas se for igual) ou LEFT JOIN (listara independemente se tiver vinculado) eu recomento o INNER JOIN para assim evita erros.

 

 

 

exemplo. aqui estou fazendo o vinculo de tres tabelas

 

ANUNCIANTES

SEGUIMENTO

SUBSEGUIMETO

 

 

SELECT *
FROM anunciante 
INNER JOIN seguimento ON anunciante.id_seguimento = seguimento.id
INNER JOIN subseguimento ON anunciante.id_subseguimento = subseguimento.id
WHERE anunciante.descricao LIKE %colanuncio% OR seguimento.descricao LIKE %colanuncio2%
GROUP BY anunciante.id

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porem, essas opções que voces me deram é somemte para nomes exatos.

 

Minha duvuda é:

 

Se existir no Bnanco u anbunciante com o nome de J.G Freitas e CIA Ltda. Ai o usuario digita la JG,. de maneira alguma qualquer um,a dessas consultas trará o resultado.

O que eu quero é que, na hora em que o usuario digitar JG, seja feita uma pesquisa no banco para saber se existe algum,a nome la que se pareça ou que pelo menos esteje proximo.;

Tipo ana e cana JG e J.G. Freitas e CIA ltda.;

 

Existe a função:

http://imasters.com.br/artigo/11364/ph..._dizer_com_php/

em php que faz isso.;

 

<?php
function voce_quis_dizer($palavra_procurada) {
	   $dicionario = unserialize(file_get_contents('dicionario_serializado.dat'));
	   $minima_distancia = -1;
	   $palavra_procurada = strtolower($palavra_procurada);
	   foreach($dicionario as $palavra_do_dicionario) {
			   if($palavra_procurada == $palavra_do_dicionario) return $palavra;
			   $distancia = levenshtein($palavra_procurada,$palavra_do_dicionario);
			   if($distancia < $minima_distancia || $minima_distancia == -1) {
					   $minima_distancia = $distancia;
					   $sugestao = $palavra_do_dicionario;
			   }
	   }
return $sugestao;
}
?>

Só que eu preferiria que o sql fizesse isso.;

Porem, casa não tivesse jeito, teria que conseguir esse arquivo dicionario_serializado.dat'.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carcleo, sei q estou sendo chato, mas:

 

Porem, essas opções que voces me deram é somemte para nomes exatos.

parece q você n leu c/ atenção meu post anterior:

 

1 - p/ pesquisa por parte do nome use os operadores % e LIKE

(...)

no link abaixo tem 1 exemplo usando Dreamweaver e ASP,mas você pode tentar adaptar ao PHP, é só p/ você pegar a lógica:

http://forum.imasters.com.br/index.php...p;#entry1153826

mas td bem;n vou insistir mais.. d qqer forma, sucesso p/ você

Compartilhar este post


Link para o post
Compartilhar em outros sites

O usuario digita la "jg" e no banco tem la na tabela de anunciantes "J.G. Freitas & Cia Ltda" ou digita Belesa e tm la na tabela de Seguimento o seguimento "Beleza" e o select acha.

 

mta vodka pra fazer isso ai hein garotinho...

 

procure por SOUNDEX(), deve te ajudar bastante

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.