Ese caso lo he pasado yo, MATCH AGAINS es muy efectivo, sin embargo no cubre busquedas que contengan palabras de hasta solo 4 letras, por lo cual seria bueno agregar condicionales para ver si el string a buscar contiene palabras pequeñas, o en caso de que sea un string de una sola palabra, mejor un LIKE.
Para ello este codigo que habia hecho yo contiene una unas condicionales, a ver si ayuda a mejorar el codigo.
Código PHP:
Ver originalfunction ResultMp3s($frase, $ini=0, $max){
if($numero==1){
$cadbusca= mysql_query("SELECT id, genero, artista, titulo FROM music_local WHERE titulo LIKE '$frase' OR artista LIKE '$frase' ORDER BY id DESC LIMIT $ini,$max"); $url = "http://music-strike.net/".$pl[genero_url]."/".$artistaurl."/";
$img = "http://biografias.music-strike.net/img_bio.php?q=".$pl[artista];
$title = limp($mp[titulo])." - ".limp($mp[artista]);
$id = $mp[id];
genero => $mp[genero],
title => $mp[titulo],
artista => $mp[artista],
titulo => $title,
id => $id,
url => $url,
img => "http://music-strike.net/images/icons/speaker_2.png",
coincidencias => "1",
);
}
}else{
$cadbusca= mysql_query("SELECT id, genero, artista, titulo FROM music_local WHERE (titulo LIKE '%$frase%' OR artista LIKE '%$frase%') OR (titulo LIKE '% $frase %' OR artista LIKE '% $frase %') ORDER BY id DESC LIMIT $ini,$max"); $url = "http://music-strike.net/".$pl[genero_url]."/".$artistaurl."/";
$img = "http://biografias.music-strike.net/img_bio.php?q=".$pl[artista];
$title = limp($mp[titulo])." - ".limp($mp[artista]);
$id = $mp[id];
genero => $mp[genero],
title => $mp[titulo],
artista => $mp[artista],
titulo => $title,
id => $id,
url => $url,
img => "http://music-strike.net/images/icons/speaker_2.png",
coincidencias => "1",
);
}
}
$repons = $mp3;
}else{
$where = "";
$peque = FALSE;
foreach($trozos as $t){
$peque = TRUE;
$agregar[] = $t;
}
}
if($peque==TRUE){
if(count($agregar)==$numero){ foreach($agregar as $ag){
$veces++;
if($veces==1){
$where .= "(artista LIKE '%$ag %' OR titulo LIKE '%$ag %')";
}else{
$where .= " AND (artista LIKE '% $ag %' OR titulo LIKE '% $ag %')";
}
}
$sqlBuscar = mysql_query("SELECT id, genero, artista, titulo FROM music_local WHERE ".$where." ORDER BY id DESC LIMIT $ini,$max"); }else{
foreach($agregar as $ag){
$veces++;
if($veces==1){
$where .= "AND ((artista LIKE '% $ag %' OR titulo LIKE '% $ag %')";
}else{
$where .= " OR (artista LIKE '% $ag %' OR titulo LIKE '% $ag %')";
}
}
$where .= ")";
$sql = "SELECT id, genero, artista, titulo,
MATCH (artista, titulo)
AGAINST ('$frase' IN BOOLEAN MODE) AS c
FROM music_local
WHERE MATCH (artista, titulo)
AGAINST ('$frase' IN BOOLEAN MODE)
".$where." ORDER BY c DESC LIMIT $ini, $max";
}
}else{
$sql = "SELECT id, genero, artista, titulo,
MATCH (artista, titulo)
AGAINST ('$frase' IN BOOLEAN MODE) AS c
FROM music_local
WHERE MATCH (artista, titulo)
AGAINST ('$frase' IN BOOLEAN MODE)
ORDER BY c DESC LIMIT $ini, $max";
}
// Para los resultados
$title = limp($mp[titulo])." - ".limp($mp[artista]);
$id = $mp[id];
genero => $mp[genero],
title => $mp[titulo],
artista => $mp[artista],
titulo => $title,
id => $id,
url => $url,
img => "http://music-strike.net/images/icons/speaker_2.png",
coincidencias
=> round($mp[c
]) );
}
$repons = $mp3;
}
return $repons;
}
En link donde lo he tratado es aqui:
http://www.forosdelweb.com/f18/error...uedas-1133209/
Ahi tambien hablo un poco sobre codificaciones UTF8, los cuales sin darnos cuenta puede causarnos prob