Klaudin 0 Denunciar post Postado Março 22, 2006 Olá amigos, estou utilizando o seguinte codigo para efetuar buscas em meu bd <?php require_once('Connections/conexao.php'); ?><form method="POST"> Palavra: <input type="text" name="palavra"> <input type="submit" value="Buscar"></form><? mysql_select_db($database_conexao);if(!empty($HTTP_POST_VARS[palavra])) { $palavra = str_replace(" ", "%", $HTTP_POST_VARS[palavra]);$qr = "SELECT * FROM noticias WHERE conteudo LIKE '%".$palavra."%' ORDER BY id DESC"; $sql = mysql_query($qr); $total = mysql_num_rows($sql); echo "Sua busca retornou <b>'$total'</b> resultados.<br>\n"; while($r = mysql_fetch_array($sql)) { echo "<hr>\n"; echo $r[conteudo]."<br>\n"; } }?> Gostaria de saber como implementar esse LIKE para que ele busque apenas por palavras completas. Desde já obrigado Compartilhar este post Link para o post Compartilhar em outros sites
UselessThoughts 0 Denunciar post Postado Março 22, 2006 tira os % e ve se é isso q você quer.[]s Compartilhar este post Link para o post Compartilhar em outros sites
Klaudin 0 Denunciar post Postado Março 22, 2006 Não funcionou :( Ele para de dar resultados, independente se é palavra completa ou não. Vou dar um exemplo do meu problema: Quando o usuário busca por digital, ele além de buscar por digital, resulta em digitalização Parece ser algo bem simples" :( Compartilhar este post Link para o post Compartilhar em outros sites
marceloy 0 Denunciar post Postado Março 22, 2006 O % funciona como um coringa.. imagina que $palavra = "digital" se você fizer WHERE conteudo LIKE ".$palavra." você terá as respostas exatamente como "digital" se o % vier depois da palavra WHERE conteudo LIKE ".$palavra." % você terá as respostas como "digitalização" além de "digital" o mesmo funciona para WHERE conteudo LIKE %".$palavra." e WHERE conteudo LIKE %".$palavra." % Compartilhar este post Link para o post Compartilhar em outros sites
micox 2 Denunciar post Postado Março 22, 2006 use "SELECT * FROM noticias where (conteudo LIKE '% $palavra %') OR (conteudo LIKE '$palavra %') OR (conteudo LIKE '% $palavra') OR (conteudo LIKE '% $palavra.') OR (conteudo LIKE '% $palavra,') OR (conteudo LIKE '% $palavra;') OR (conteudo LIKE '% $palavra!') OR (conteudo LIKE '% $palavra?') OR (conteudo LIKE '% $palavra:') ORDER BY id DESC"Não sei se há uma forma melhor de fazer, mas se houver, tomara que alguem poste aí... Porque dessa forma que eu fiz, é meio falho e trabalhoso né?... Compartilhar este post Link para o post Compartilhar em outros sites
marceloy 0 Denunciar post Postado Março 22, 2006 micox, agora eu fiquei boiando ..o que faz seu exemplo ?? Compartilhar este post Link para o post Compartilhar em outros sites
micox 2 Denunciar post Postado Março 22, 2006 corrigindo um pequeno erro (adicionando % após os pontos de pontuação) "SELECT * FROM noticias where (conteudo LIKE '% $palavra %') OR (conteudo LIKE '$palavra %') OR (conteudo LIKE '% $palavra') OR (conteudo LIKE '% $palavra.%') OR (conteudo LIKE '% $palavra,%') OR (conteudo LIKE '% $palavra;%') OR (conteudo LIKE '% $palavra!%') OR (conteudo LIKE '% $palavra?%') OR (conteudo LIKE '% $palavra:%') ORDER BY id DESC" A explicação - Aquele exército de WHERE buscam: 1)Pela palafra entre 2 espaços (conteudo LIKE '% $palavra %') 2)Pela palavra no começo do campo conteudo com um espaço após(conteudo LIKE '$palavra %') 3)Pela palavra no fim do campo conteudo com um espaço antes(conteudo LIKE '% $palavra') 4)Pela palavra no fim de uma frase com um ponto final(conteudo LIKE '% $palavra. %'). 5) etc Acho que agora deu pra entender né? Funcionou essa loucura acima aí?? Pelamordedeus!!! alguém mais experiente consiga uma solução melhor pra este problema... Compartilhar este post Link para o post Compartilhar em outros sites
Perfect Lion 10 Denunciar post Postado Março 22, 2006 faz o seguinte... crie um script de detectar a maneira de pesquisa igual o google faz... ex: você quer pesquisar "Digital" só que no banco de dados temos o "Digitalizar"; para que você possa localizar somente o "Digital" vamos usar um meio legal que é o (") aspa simples. ex. $busca = '"digital"'; (ereg ("\"(.*)\"", $busca, $b))? $busca= strtoupper($b[1]):$busca = strtoupper("%".$busca."%");$select = mysql_query("select * from tabela where upper(conteudo) like $busca"); ai ele busca somente a palavra ... e se você colocar sem tar entre (") ele busca digital, digitalizar e assim vai ;) Fabão tou aprendende a diminuir os codigo, logo logo chego a 1 linha igual a você :P Compartilhar este post Link para o post Compartilhar em outros sites
micox 2 Denunciar post Postado Março 22, 2006 Aí perfect. Não sou bom com Expressoes regulares. Me explica aí o que esta linha faz por favor: (ereg ("\"(.*)\"", $busca, $b))? $busca= strtoupper($b[1]):$busca = strtoupper("%".$busca."%"); Compartilhar este post Link para o post Compartilhar em outros sites
Perfect Lion 10 Denunciar post Postado Março 22, 2006 micox -> opa eu tbm num sou bom mais consigo entender :P bem vamos lá.. a sintexa do ereg() é o seguinte: ereg ( string expressao, string variavel [, array registros] ); onde expressão é uma maneira dele interpreta a pesquisa em uma string, variavel a mensagem para ele buscar, registros onde retorna um array caso ele encontre algo na string. tbm estou usando um if simplificado com a sintaxe: (condição)? true:false; então o nosso amigo ereg() ele retorna um boleano caso ele encontre o resultado da busca ele retorna um true caso ao contrario um false. Agora vamos ao ER (Expresão Regular); Eu usei o seguinte -> "\"(.*)\"" ;) Compartilhar este post Link para o post Compartilhar em outros sites
Klaudin 0 Denunciar post Postado Março 22, 2006 Obrigado, Useless, Marcelo, Micomix e Lion :) Consegui resolver meu problema das 3 maneiras, agora só falta escolher qual utilizar! Valew http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites
Perfect Lion 10 Denunciar post Postado Março 22, 2006 Klaudin -> quanto mais limpo o script mais agil ele fica ai depende do que você quer ;) Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Março 22, 2006 só uma coisa se ele quer buscar por palavras completas nao precisa usar o like use apenas = exemplo: select * from frutas where fruta = 'banana' assim ira encontrar a palavra completa se nao existir nao achara nada e para ajudar na busca deixe a palavra digitada tudo em minusculo para bater com a que tiver no banco mas se resolveu as explicaçlões beleza, mas como falei para busca mais extatas nao se usa o like Compartilhar este post Link para o post Compartilhar em outros sites
Perfect Lion 10 Denunciar post Postado Março 22, 2006 Boa fabão... mais não precisa gravar no db tudo em maiusculo não depois que eu descobri como trabalha com sistema de busca agora a pessoa pode registra tanto maiusculo e minusculo juntos que vai dar na mesmo.. é só colocar o upper(campo) que ele puxa do banco em maiusuculo e compara junto com o strtoupper(string) ;) fazendo assim você num ter esse problema se salva tudo em maiusuco ou minusculo e tbm da liberdade para o kra escrever da maneira que ele quer ;) Compartilhar este post Link para o post Compartilhar em outros sites
micox 2 Denunciar post Postado Março 22, 2006 VAleu as explicações aí... Depois vou testar este script e estudar mais ER e a ereg.Valeus... Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Março 22, 2006 Sobre o cadastro no banco sempre é bom ter um padrao mesmo que o usuario digite tudo maiusculo ou minusculo no banco sempre vai cadastrar um padrao e outra coisa importante evitar gravar dados formatados, só formatar na hora de visualizar Compartilhar este post Link para o post Compartilhar em outros sites