Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boas a todos!
Estou com um probleminha em uma consulta. É o seguinte:
No campo "termo" da aplicação o usuário irá digitar um termo pelo qual ele deseje encontrar no resultado da busca.
Ex.de termo: “palavra1 palavra2 palavra3”.
Na rotina abaixo eu recebo o termo digitado e o desmembro em até 4 palavras, obtendo o seguinte resultado:
$termo1 = “palavra1”;
$termo2 = “palavra2”;
$termo3 = “palavra3”;
$termo4 = “”;
if ($_GET["termo"] == ' ') {
$_SESSION["termonovo"][1] = '';
$_SESSION["termonovo"][2] = '';
$_SESSION["termonovo"][3] = '';
$_SESSION["termonovo"][4] = '';
} else {
$_SESSION["termonovo"][1] = '';
$_SESSION["termonovo"][2] = '';
$_SESSION["termonovo"][3] = '';
$_SESSION["termonovo"][4] = '';
$termo = $_GET["termo"];
$cont = 1;
$varios = strlen($termo);
for ($ii = 0; $ii <= $varios - 1; $ii++) {
$_SESSION["termonovo"][$cont] .= substr($termo, $ii, 1);
if (substr($termo, $ii, 1) == ' ') {
$cont++;
}
}
}
$termo1 = $_SESSION["termonovo"][1];
$termo2 = $_SESSION["termonovo"][2];
$termo3 = $_SESSION["termonovo"][3];
$termo4 = $_SESSION["termonovo"][4];
Após o desmembramento do termo em palavras, vem o código SQL que irá fazer a consulta:
$sql = "SELECT * FROM produto WHERE 1=1 ";
if ($termo1 != ''){
$sql.="and ((vc_fabricante like '%".$termo1."%') or (vc_modelo like '%".$termo1."%') or (vc_cor like '%".$termo1."%') or (vc_observacao like '%".$termo1."%') ";
if ($termo2 != ''){
$sql.="or (vc_fabricante like '%".$termo2."%') or (vc_modelo like '%".$termo2."%') or (vc_cor like '%".$termo2."%') or (vc_observacao like '%".$termo2."%') ";
if ($termo3 != ''){
$sql.="or (vc_fabricante like '%".$termo3."%') or (vc_modelo like '%".$termo3."%') or (vc_cor like '%".$termo3."%') or (vc_observacao like '%".$termo3."%') ";
if ($termo4 != ''){
$sql.="or (vc_fabricante like '%".$termo4."%') or (vc_modelo like '%".$termo4."%') or (vc_cor like '%".$termo4."%') or (vc_observacao like '%".$termo4."%') ";
}
}
}
$sql.=") ";
}
Bom, hoje verifiquei que há algo errado no código SQL, pois se eu fizer uma pesquisa usando o mesmo termo com as palavras invertidas eu terei resultados diferentes.
Explicando melhor:
Considerando que a tabela “produto” tenha os seguintes dados:
Código vc_observacao
1 palavra1
2 palavra2
Se eu digitar o termo “palavra1 palavra2” o resultado final da pesquisa será:
palavra1
palavra2
Agora se eu digitar o termo “palavra2 palavra1” o resultado será:
palavra1
Alguém saberia dar alguma dica para arrumar isso?
Carregando comentários...