Q:

Como pesquisar por múltiplos termos independente de ordem?

o meu cenário e o seguinte, tenho um input onde o usuário coloca o termo e clica em pesquisa
EX: carro horizonte [ENTER]
o porem e que esta listando o resultado das palavras separados
EX: 3 resultados encontrados
id1 - casa em belo horizonte  
id2 - aceita carro na troca 
id3- carro localizado em belo horizonte 
gostaria que exibisse somente o resultado que contenha as 2 palavras
EX: 1 resultado encontrado
id1- carro localizado em belo horizonte
?>
$search_term = filter_var($_GET["s"], FILTER_SANITIZE_STRING);
$palavras = explode(" ", $search_term);
for ($i = 0; $i < count($palavras); $i++) 
$q = "SELECT * FROM classificados WHERE texto LIKE '%".$palavras[$i]."%' AND aprovado='s' ORDER BY ID desc";
$r = mysql_query($q);
if(mysql_num_rows($r)==0)//no result found
{
echo "<div id='search-status'>Nenhum resultado encontrado!</div>";
}
else //result found
{
echo "<ul>";
while($row = mysql_fetch_assoc($r))
    {
    $title = $row['texto'];
?>

espero ter ilustrado bem minha duvida

A:

Segue modificação no seu loop para montar a query:
 $search_term = filter_var( $_GET['s'], FILTER_SANITIZE_STRING );
 $palavras = explode( ' ', $search_term );
 $q = 'SELECT * FROM classificados WHERE';
 for ( $i = 0; $i < count($palavras); $i++ ) { 
    $q .= " texto LIKE '%" . $palavras[$i] . "%' AND " ;
 }
 $q .= " aprovado='s' ORDER BY ID desc";
 $r = mysql_query( $q );

 if( mysql_num_rows( $r )==0 ...

Se preferir a busca exata que não pegue carros em vez de carro, basta usar assim:
 $search_term = filter_var( $_GET['s'], FILTER_SANITIZE_STRING );
 $palavras = explode( ' ', $search_term );
 $q = 'SELECT * FROM classificados WHERE';
 for ( $i = 0; $i < count( $palavras ); $i++ ) { 
    $q .= " CONCAT( \" \", texto, \" \" ) LIKE '% " . $palavras[$i] . " %' AND "; 
 }
 $q .= " aprovado='s' ORDER BY ID desc";
 $r = mysql_query($q);

Tenha o cuidado neste caso de manter os espaços como estão no código.

