Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou com o seguinte problema:
Minha consulta está para duas tabelas. Tabela album e tabela local.
$sql = mysql_query("SELECT a.id, a.data, a.titulo, a.fotoDestaque, l.local
FROM tbl_album a
INNER JOIN tbl_local l ON l.id = a.local
WHERE l.cidade = \"" . anti_sql_injection($cidade) . "\" AND a.cidade = \"" . anti_sql_injection($cidade) . "\" AND a.titulo LIKE '%$busca%' OR a.metaDescricao LIKE '%$busca%' OR a.metaPalavrasChave LIKE '%$busca%' OR l.local LIKE '%$busca%' collate utf8_unicode_ci ORDER BY a.data DESC, a.titulo DESC") or die (mysql_error());
Se eu pesquisar "Arrocha", nome da festa, ele traz o resultado;
Se eu pesquisar "Urca" , nome do bar onde teve a festa, ele traz o resultado.
Porém, se eu pesquisar "Arrocha - Urca" ele não traz resultado nenhum.
Onde está o meu erro? :(
Quando usar AND e OR na mesma condição use pararenteses para ter certeza da hierarquia da regra.
Obrigado pelas respostas;
Quando usar AND e OR na mesma condição use pararenteses para ter certeza da hierarquia da regra.
Será que é por isso que a festa na cidade = 2 aparece também na consulta? Coloquei entre parenteses e esse problema foi realmente resolvido.
>
coloca um where FESTA like %TEUTEXTO% or LOCAL like %SEUTEXTO%
No caso a festa é o a.titulo. E o local é o l.local;
Alguém tem outra sugestão de como posso resolver isso?
Fiz dessa forma e não sei se é a melhor forma, alguém pode me dar um feedback?
<?php
$palavra = explode(" ", $busca);
$query .= "SELECT a.id, a.data, a.titulo, a.fotoDestaque, l.local
FROM tbl_album a
INNER JOIN tbl_local l ON l.id = a.local
WHERE ((l.cidade = \"" . anti_sql_injection($cidade) . "\") AND (a.cidade = \"" . anti_sql_injection($cidade) . "\"))";
$tam = count($palavra);
for ( $i = 0; $i < $tam; $i++ ){
$query .= " AND ((a.titulo LIKE '%".$palavra[$i]."%') OR (a.metaDescricao LIKE '%".$palavra[$i]."%') OR (a.metaPalavrasChave LIKE '%".$palavra[$i]."%') OR (l.local LIKE '%".$palavra[$i]."%'))";
}
$query .= "ORDER BY a.data DESC, a.titulo DESC";
$sql = mysql_query($query)or die (mysql_error());
?>Eu faria com FULL TEXT, desta forma trás muitos dados que não ira corresponder com o termo da busca.
coloca um where FESTA like %TEUTEXTO% or LOCAL like %SEUTEXTO%
www.clubedosgeeks.com.br