Ir para conteúdo
Fórum Script Brasil
  • 0

Resultado Por Proximidade


Guest --Henrique --

Pergunta

Guest --Henrique --

Olá Amigos...

Seguinte, Esse é O Fonte do pesquisa.php :

<?php

$conexao = mysql_connect("localhost", "root", "")

or die ("Erro na conexão ao banco de dados.");

$db = mysql_select_db("busca")

or die ("Erro ao selecionar a base de dados.");

$que = $_POST['que'];

$consulta = "select * from busca where keywords LIKE '%%$que%%'";

$resultado = mysql_query ($consulta , $conexao);

echo "<table border='1' align='center'>\n";

echo"<tr><td>texto</td></tr>\n";

while ( $linha= mysql_fetch_row ( $resultado )){

printf ("<tr><td>$linha[0]</td>");

printf ("<td>$linha[1]</td></tr>");

}

echo "</table>\n"

?>

Para dar maior flexibilidade à Busca .... eu Usei : '%%$que%%'

Até ai Ok...

Mas c eu Pesquiso Por Exemplo por " XZ " ... E No Banco de Dados tem uma Linha com o Campo Exatamente " XZ"

e Outro Apenas "X" .... ELe Vai Mostrar os Dois .... Perfeito ! Mas a Ordem como ele Mostra eu já percebi que é por data de Cadastro e não Por Proximidade da Palavra Buscada ... Ou seja .... Se eu Cadastrei o "X" Por Ultimo .... Ele Vai Mostrar ele Primeiro ... Mesmo Tendo um Campo Identico à Palavra Buscada !!

alguém Sabe Como Criterizar Os Resultados ?

valeu A forca Galera!

Link para o comentário
Compartilhar em outros sites

22 respostass a esta questão

Posts Recomendados

  • 0
Guest --Henrique --
Então você vai ter que bolar um filtro com os resultados... quem sabe botar tudo num array e a partir disso colocar na ordem que você acha mais conveniente...

Desculpa Eserra... Mas não Entendi ( Sou meio Fraco em PHP ). Se você Puder me Passar a linha de raciocínio do Script (...) Ai , eu Continuo .=)

valeu a Forca.

Link para o comentário
Compartilhar em outros sites

  • 0

Simples... pega todos os resultados vindo do banco de dados e joga num array (basta chamar eles numa variável com colchetes vazios tipo $dados[] = ..., assim eles vão formar um array)

Com o array formado você deve pegar os elementos e comparar com a palavra que foi efetivamente procurada, se ela for igual você pega ela e manda imprimir (ou faz outra coisa) e nesse mesmo momento você já pode ir removendo esses elementos que são exatamente iguais a palavra pesquisada (basta usar: unset($dados[chave_do_array]) ), ai você tem que definir como quer os resultados restantes, dependendo do que você quiser um simples sort no array já vai dar conta do recado...

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Henrique --
Recomendo você estudar mais o SQL e fazer essa query diretamente na sentença ao invés de filtrar no php, aprenda da maneira correta :)

E ai ESerra ? O que que você Acha ?

estou perguntando Porque Preciso definir algo Para que eu estude ! E ... Acredito que vocês tem mais experiência ... E isso pode reduzir o tempo gasto com estudos =D

valeu Galera

Link para o comentário
Compartilhar em outros sites

  • 0

Na faculdade o meu foco para bancos de dados foi segurança e integridade, então eu não sei fazer "tudo que é possível", no caso a ordenação que eu sei possível é pelo ORDER BY, se ele não funciona eu não vejo outra solução senão utilizar a linguagem da página para filtrar o que vier do banco...

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Henrique --

ESerra... Sou Muito Fraco em Programacao !

Mas... Eu dei uma Estudada( pra não ficar fazendo perguntas idiotas ) Na Sua Sugestao sobre Ordenar Artavez de um Array.

você acredita queFuncao ARSORT pode me ajudar ? Já que ela Ordena decrescentemente .

se sim... Como ficaria ?

Obrigado Novamente.

Link para o comentário
Compartilhar em outros sites

  • 0

O seu problema é que existem 3 possibilidades na query

1 - Vir a palavra exata

2 - Vir uma palavra derivada da esquera

3 - Vir uma palavra derivada da direita...

Suponde que você procure por ac

Se existir uma palavra chamada nac e outra acao no BD elas vão ser pegar na sua query... e ai entra o modo como você vai querer ordernar, se for pra ordenar alfabeticamente basta usar o ORDER BY, agora se você quiser a que mais se aproxima da procurada, ai que está o problema na hora da definição, o que o ARSORT faz é um usar a ordem alfabética decrescente..

Link para o comentário
Compartilhar em outros sites

  • 0

Cara realmente é uma situação delicada.... concordo com ESERRA, acho que você deveria tratar os resultados num array e verificar qual chega mais próximo do pesquisado.... Para contornar o problema, mas não o solucionar, você pode fazer o if perguntado se alguns dos resultados obtidos é exatamente igual ao que foi digitado... se sim, exiba ele primeiro....

Olha, talvez não contribua muito, mas você pode ordenar sua pesquisa com duas clausulas ORDER BY, uma pra ordenar do promeiro pro ultimo e outra em ordem alfabeitca:

$consulta = "select * from busca where keywords LIKE '%%$que%%' ORDER BY id_keywords DESC, keywords ASC";

Bom... acho que vai dá na mesma

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Henrique --

As Opinoies ... Já Valem d + cara !

De Qualquer Forma .... Eu Estou estudando para selecionar direto na QUERY .... Vou fazer os Comparativos ( seu conseguir ) . E Posto Aqui o Resultado .!

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Henrique --

Eserra....

E se eu Usar uma Funcao de Comparacao enter strings ?

SIMILAR_TEXT

Sei que ela Compara duas strings e retorna um Valor em PORCENTAGEM ! Assim eu Posso Ordenar decrescentermente

você tem alguma Idéia de Como eu Faria Isso ? :huh:

Link para o comentário
Compartilhar em outros sites

  • 0

O que essa função faz é dizer quão similiar é a string de teste com a testada, o problema é que a similaridade já é sabida através da própria query que você for usar... ela não serve para o que você quer, mas repito, se a sua idéia é apenas ordernar alfabeticamente sem nenhum tipo de critério de proximidade simplesmente use o ORDER BY campo DESC...

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Henrique --

Entendi...

Mas não a Intencao não é ordenar alfabeticamente ! Por isso pensei nesta Funcao !

O Objetivo é que os resyltados sejam " rankiados" na medida que se aproximam da palavra buscada .

Por Exemplo:

Caso eu insira as Palavras Chaves [ destaque , desta ]em linhas distintas... c eu buscar [ desta ]... a linha que tem [destaque] aparece primeiro. Ou seja , O Indice não está aparecendo por ondem de precisão e sim pelo registro Mais Recente .
<= O PROBLEMA SE RESUME A ISSO :unsure:

Por isso eu Pensei Naquela Funcao .... Para que o quanto mais a palavra chave se aproxime de (100%) palavra buscada melhor será a linha no ranking .

Link para o comentário
Compartilhar em outros sites

  • 0

Ela serve em partes, pois o que ela faz é verificar quantas letras são coincidentes nas palavras que são comparadas...é claro que palavras que tem muitas letras coincidentes tendem a ser parecidas, mas isso também pode gerar falsos positivos...

Link para o comentário
Compartilhar em outros sites

  • 0
Pessol, qual a moral do %%TESTE%% ?????

Um só não basta, %TESTE%???

Sim bastaria %TESTE%... já vi em várias apostilas antigas usando 2 %%, acho que (palpite) nas versões antigas tinha que usar assim, mas hoje só % já é o suficiente...

Link para o comentário
Compartilhar em outros sites

  • 0

Como eu disse desde o começo, a menos que exista uma fórmula mágina direto na query você vai ter que trabalhar no PHP para fazer a filtragem e nem no próprio PHP você vai ter uma função ou algo do gênero que retorne a coisa exatamente da maneira como você quer...

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Henrique --

estou Chegando .... ( eu Acho ) =D

alguém Sabe onde está o erro neste Pedaco ?

<style type="text/css"> @import url("style.css"); </style>

<?php

$conexao = mysql_connect("localhost", "root", "")

or die ("Erro na conexão ao banco de dados.");

$db = mysql_select_db("busca")

or die ("Erro ao selecionar a base de dados.");

$que = $_POST['que'];

$consulta ="SELECT DISTINCT (COD_BUSCA), URL FROM keywords LEFT JOIN busca ON busca.cod = keywords.cod_busca WHERE keyword LIKE '%$que%'ORDER BY keyword, url;"

$resultado = mysql_query ($consulta , $conexao);

echo "<table class='tabela'>\n";

echo"<tr><td>Resultados para: $que</td></tr>\n";

while ( $linha= mysql_fetch_row ( $resultado )){

printf ("<tr><tr><td>$linha[0]</td></tr>\n");

printf ("<tr><td>$linha[1]</td></tr>\n");

printf ("<tr><td>$linha[2]</td></tr>\n");

printf ("<tr><td>$linha[3]</td></tr></tr><p></p>");

}

echo "</table>\n"

?>

Link para o comentário
Compartilhar em outros sites

  • 0

WHERE keyword =  '$que'

OR keyword LIKE '%$que'

OR keyword LIKE '$que%'


Pronto, assim você tratou as 3 possibilidades nas condições da query individualmente.
Estava passando por aqui procurando outro assunto e me "interei" no seu problema 🙂

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...