Jump to content

POWERED BY:

Archived

This topic is now archived and is closed to further replies.

Leandro Nigre

Busca por palavra exata

Recommended Posts

As aspas sumiram, mas continua dando erro: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%salários%''' at line 1

 

Estou usando MySQL 5.0 com Apache 2.0 e php 5.2.6

Share this post


Link to post
Share on other sites

Opa, agora deu alguma coisa. Dei o echo e a busca trouxe o resultado. Porém, ainda não traz a palavra exata.

 

O Code está assim:

 

 

$colname_Recordset1 = "-1";

if (isset($_GET['search'])) {

$colname_Recordset1 = $_GET['search'];

}

mysql_select_db($database_connPMMC, $connPMMC);

$query_Recordset1 = sprintf("SELECT * FROM noticias WHERE texto Like '% " . $colname_Recordset1 . " %'");

 

echo "Consulta: " . $query_Recordset1;

 

$Recordset1 = mysql_query($query_Recordset1, $connPMMC) or die(mysql_error());

$row_Recordset1 = mysql_fetch_assoc($Recordset1);

$totalRows_Recordset1 = mysql_num_rows($Recordset1);

Share this post


Link to post
Share on other sites

ESTAMOS NO CAMINHO CERTO!

 

Veja, agora deu certo. O resultado traz exatamente a palavra digitada, e o echo traz o que foi pesquisado:

 

Consulta: SELECT * FROM noticias WHERE texto LIKE '% salários %'

 

Ainda estou fazendo os testes, mas identifiquei alguns probleminhas.

1 - Se a palavra pesquisada está bem antes de uma vírgula, ou entres aspas, ou colada em qualquer caractere de acentuação, não traz o resultado.

2 - Se não digito nada e submeto o formulário, ele curiosamente traz o primeiro resgitro do BD, o do meio, e o último [ Imagem Postada weird]

3 - programando manualmente assim, se depender do dreamweaver, significa que vou dar muito trabalho por aqui ainda [ Imagem Postada ]

Share this post


Link to post
Share on other sites

provavelmente está dando conflito com o % no sprintf. Faça assim

 

$query_Recordset1 = "SELECT * FROM noticias WHERE texto Like '% " . $colname_Recordset1 . " %'";

echo "Consulta: " . $query_Recordset1;

$Recordset1 = mysql_query($query_Recordset1, $connPMMC) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);

 

1 - Se a palavra pesquisada está bem antes de uma vírgula, ou entres aspas, ou colada em qualquer caractere de acentuação, não traz o resultado.

Nesse caso, você terá de fazer uns OR's, inserindo as possibiliadades aceitas pelas condições. Uma maneira mais correta é usar expressão regular, mas creio que você nem saiba o que é isso...

Share this post


Link to post
Share on other sites

Na verdade Beraldo, eu já tinha tirado o sprintf antes de fazer os testes.

 

Bom, de qualquer maneira, um dos problemas eu resolvi. Usando OR's pegarei palavras mesmo coladas em vírgulas e pontos finais. Vou incrementar mais para incluir aspas e parêntes, que são bem comuns também.

 

mysql_select_db($database_connPMMC, $connPMMC);

$query_Recordset1 = "SELECT * FROM noticias WHERE texto LIKE '% " . $colname_Recordset1 . " %' OR texto LIKE '% " . $colname_Recordset1 . ", %' OR texto LIKE '% " . $colname_Recordset1 . ". %'";

echo "Consulta: " . $query_Recordset1;

 

O que você acha?

 

Agora, quanto ao lance de submeter o formulário vazio, acho que posso resolver com uma função de validação de formulário.

Share this post


Link to post
Share on other sites

Poutz, esse lance de usar OR's vai dar trabalho.... :upset:

 

palavra.

palavra,

palavra?

palavra!

palavra-

-palavra

-palavra,

(palavra

palavra)

palavra).

(palavra)

(palavra).

"palavra

palavra"

palavra".

"palavra"

"palavra".

 

Mas tudo bem, é o jeito.

 

O único erro que dá aquele de submeter o formulário vazio. Ele traz o primeiro, o último e o registro do meio do BD. Mas relaxa, isso resolvo impedindo a pessoal de submeter se estiver vazio. Agora, vou ver se consigo (manualmente) repetir a região para ele litar o resultados, pois isso eu fazia pelo dreamweaver.

 

Abraço

Share this post


Link to post
Share on other sites

beleza Beraldo! Cara, valeu pela força e paciência. Vou estudar as expressões regulares e qualquer coisa volto aqui!

 

Abraço

Share this post


Link to post
Share on other sites

Fala Beraldo, blza? Será que pode me ajudar com mais uma coisinha? Bem, é o seguinte.

 

Com o code abaixo, percebi que se uma pessoa buscar por duas palavras no form, só retornará o resultado se as palavras estiverem exatamente como foi digitado no formulário. Exemplo: Se a pessoa buscar a cidade Mogi das Cruzes, dá certo. Se buscar Mogi Cruzes, dá errado.

"SELECT * FROM noticias WHERE texto LIKE '% " . $colname_Recordset1 . " %'";

Encontrei uma função que resolve isso, deixando o code assim:

"SELECT * FROM noticias WHERE texto LIKE '% " . implode('%', explode(' ', $colname_Recordset1)) . " %'";

Porém, se a pessoa digitar ao inverso Cruzes Mogi, não traz resultado.

 

 

Minha peregunta então é: há alguma função simples com a de cima, ou esse caso precisa ser resolvidos ccom as tais expressões regulares?

 

Abração

Share this post


Link to post
Share on other sites

Grande Beraldo!

Tentei usar o code que você indicou, mas a página de resultado dá erro (não é encontrada)... Veja se estou usando corretamente, por favor. Imagem Postada

$colname_Recordset1 = "-1";if (isset($_GET['search'])) {  $colname_Recordset1 = $_GET['search']; }$palavras = explode(" ", $colname_Recordset1);mysql_select_db($database_connPMMC, $connPMMC);$query_Recordset1 = "SELECT * FROM noticias WHERE"for (i$ = 0; $1 < count ($palavras); $i++) {$query_Recordset1 = "texto LIKE ' " . $palavras[$i] . " ' " . (($i == count ($palavras) - 1) ? "" : " OR");}echo "Consulta: " . $query_Recordset1;

Share this post


Link to post
Share on other sites

Sabe quando você vai entrar na Net e está sem conexão? Daí o browser mostra aquela página em branco padrão com o título Página não Encontrada / Page Not Found error .... Isso sempre acontece no meu servidor de testes quando há erro de programação na página...

Share this post


Link to post
Share on other sites

Fiz uma pequena alteração e agora o sistema encaminha para a página de resultado, não dando mais o erro anterior.

Só que não está trazendo nenhum resultado. E quando busco por duas palavras, ele só "imprime" a segunda.

Por exemplo, digitei na busca cargos salários e ele retornou o seguinte: Consulta: SELECT * FROM noticias WHERE texto LIKE ' salários '

 

Meu code está assim:

$colname_Recordset1 = "-1";
if (isset($_GET['search'])) {
  $colname_Recordset1 = $_GET['search']; }

$palavras = explode(" ", $colname_Recordset1);

mysql_select_db($database_connPMMC, $connPMMC);
for ($i = 0; $i < count ($palavras); $i++) {
$query_Recordset1 = " SELECT * FROM noticias WHERE texto LIKE ' " . $palavras[$i] . " ' " . (($i == count ($palavras) - 1) ? "" : " OR");
}

echo "Consulta: " . $query_Recordset1;

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.