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:

busca em duas colunas da tabela

14-08-2009 15:59

Opa, seguinte, tenho um banco de dados, uma tabela de CLIENTE, onde nesta tabela alem do ID, e outros dados, existem duas colunas NOME_FANTASIA e RAZAO_SOCIAL.

estou tentando fazer uma busca, onde é feita uma pesquisa pelo valor digitado, tanto em NOME_FANTASIA, quanto RAZAO_SOCIAL

algo +/- assim:

$q = utf8_decode($_GET["q"]);
$sql = "SELECT * FROM cliente WHERE razao_social LIKE '%$q%' OR nome_fantasia LIKE '%$q' ORDER BY razao_social ASC";
$results = mysql_query($sql);
while ($row = mysql_fetch_array( $results )) {
$id = $row["cli_codigo"];

so que este OR que usei, nao esta funcionando, nao sei qual o comando que funcione, para que a busca seja feita nos dois campos e retorne dados sem repetir, tipo, se o nome fantasia for JOÃOZINHO e a razão social for JOÃO SILVA.
qdo buscar por JOÃO, deve retornar apenas uma vez, e nao repetir o mesmo registro.

alguma sugestão?
0
MIDZ.com.br
http://www.midz.com.br
Soluções Web
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17680
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

busca em duas colunas da tabela

14-08-2009 17:51

Cada pessoa tem só um cadastro, certo? Então joga um LIMIT na consulta, assim quando achar o primeiro não vai buscar pelo segundo.
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:

busca em duas colunas da tabela

16-08-2009 02:22

Oii, desculpa a demora, estava trabalhando, longe do pc!!

Seguinte, acontece que com esta estrutura, usando o OR no SELECT, ele nao busca nas duas colunas, nao sei como deve ser a query para este tipo de consulta.

Imagine o seguinte, um site de noticias, e possui um campo de busca, um unico campo, onde o usuario digita o que procura, e a busca é feita no banco de dados, na tabela noticias, em 3 colunas, TITULO_NOTICIA, TEXTO_NOTICIA, CATEGORIA_NOTICA.

entao se ele buscasse por INFORMÁTICA,
todas noticias da categoria informatica seriam listadas uma vez cada, mesmo que o termo "INFORMATICA" estivesse nos outros campos,
se a categoria for outra, mas no texto da noticias conter a palavra, ela tbm é listada nos resultados. o mesmo serve pro titulo.

Com este exemplo de consulta, nao funciona.
$sql = "SELECT * FROM cliente WHERE razao_social LIKE '%$q%' OR nome_fantasia LIKE '%$q' ORDER BY razao_social ASC";

isto nao faz buscar nas duas colunas (razao_social e nome_fantasia)

sabe como seria esta query?
0
MIDZ.com.br
http://www.midz.com.br
Soluções Web
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17680
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

busca em duas colunas da tabela

16-08-2009 10:06

Eu acho o seguinte, o OR ou || " ou " visa retornar resultados se a primeira ou segunda condição estiverem verdadeiras.

Tipo nesse exemplo

$a = "a"; $b = "b"; if($a=="a" OR $b=="c") { echo "alguma verdadeira"; }

Você vai ver que o echo será mostrado, porque ou uma ou outra é verdadeira.

É o que acontece quando você usa o OR na consulta, se a primeira for verdadeira ele mostra, se a segunda também for, vai ser mostrada também.

Eu entendi o resultado que você quer, quer retornar só um resultado com base no valor, na coluna um ou coluna 2, aparentemente o modo mais viável é você filtrar na coluna, ou seja, adiciona um input radio para a pessoa escolher em qual coluna quer buscar.
0
A melhor hospedagem para o seu site HostGator!
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17680
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

busca em duas colunas da tabela

16-08-2009 14:23

Tava pensando aqui, como uma alternativa, você poderia fazer uma consulta sobre um item, se o resultado da consulta for 0, você carrega a outra consulta, se baseando na mesma informação, tipo:

SELECT campos FROM tabela WHERE esta_coluna='este_valor'
// se tem resultado, mostra e não roda a outra consulta
// se não tem, carrega a segunda consulta, e informa se teve resultado ou não
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:

busca em duas colunas da tabela

17-08-2009 18:17

OI WEB, gostei desta idéia que sugeriu, usar uma consulta condicional né. Se a primeira nao retornar valor, entao consultar na outra coluna. Acho que assim funciona.

Só antes de testar, vou explicar onde é usado esta consulta.
Estou fazendo um esquema que tem um AUTOCOMPLETE com JQUERY, usando AJAX claro,
entao qdo o usuario digita qualquer coisa, tipo, a cada caractere, ele faz a ação, consulta a tabela e retorna os valores.

Eu já acho isto meio lento e pesado, pois o LIKE %$valor% ja deixa a consulta lenta, imagina um site de noticias, com um texto enorme, procurar pelo $valor neste conteudo, vai ser lento, ai imagina fazer isto duas vezes rsrsrs,

Não sei se tem outra solução, ate agora acho que esta sua sugestão é a mais viável, vou testala e utilizala ate que quem sabe, consiga uma forma mais otmizada, ou nativa pro proprio mysql, o que iria facilitar muito a utilização.

Valeu fera!!!!!!
0
MIDZ.com.br
http://www.midz.com.br
Soluções Web
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17680
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

busca em duas colunas da tabela

17-08-2009 18:27

É complicado, o que conheço de otimização é de fechar a conexão e filtar o máximo os campos retornados "não usando *". Dessa forma ainda não conheço, mas, se achar algo relacionado a esse tipo de filtragem posto aqui.
0
A melhor hospedagem para o seu site HostGator!

Quem está online

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