Ver Mensaje Individual
  #37 (permalink)  
Antiguo 26/07/2015, 21:50
fido-strike
 
Fecha de Ingreso: noviembre-2008
Ubicación: Cochabamba Bolivia
Mensajes: 519
Antigüedad: 16 años, 1 mes
Puntos: 26
Respuesta: [Aporte] Como hacer un buscador sencillo usando PHP y MySQL

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 original
  1. function ResultMp3s($frase, $ini=0, $max){
  2.     $frase = mysql_real_escape_string($frase);
  3.     $trozos= explode(" ",$frase);
  4.     $numero= count($trozos);
  5.     if($numero==1){
  6.         $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");
  7.         if(mysql_num_rows($cadbusca)>0){
  8.             while($mp = mysql_fetch_assoc($cadbusca)){
  9.                 $artista = ucwords(str_replace("_"," ",str_replace("-"," ",limp($pl[artista]))));
  10.                 $artistaurl = str_replace("_","-",str_replace(" ","-",limp($pl[artista])));
  11.                 $url = "http://music-strike.net/".$pl[genero_url]."/".$artistaurl."/";
  12.    
  13.                 $img = "http://biografias.music-strike.net/img_bio.php?q=".$pl[artista];
  14.                 $title = limp($mp[titulo])." - ".limp($mp[artista]);
  15.                 $id = $mp[id];
  16.                 $url = "http://mp3.music-strike.net/00".$mp[id]."/".str_replace(' ','+',str_replace('-','+',$mp[artista]))."+-+".str_replace(' ','+',str_replace('-','+',$mp[titulo]))."/";
  17.    
  18.                 $mp3[] = array(
  19.                     genero => $mp[genero],
  20.                     title => $mp[titulo],
  21.                     artista => $mp[artista],
  22.                     titulo => $title,
  23.                     id => $id,
  24.                     url => $url,
  25.                     img => "http://music-strike.net/images/icons/speaker_2.png",
  26.                     coincidencias => "1",
  27.                     );
  28.             }
  29.         }else{
  30.             $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");
  31.             while($mp = mysql_fetch_assoc($cadbusca)){
  32.                 $artista = ucwords(str_replace("_"," ",str_replace("-"," ",limp($pl[artista]))));
  33.                 $artistaurl = str_replace("_","-",str_replace(" ","-",limp($pl[artista])));
  34.                 $url = "http://music-strike.net/".$pl[genero_url]."/".$artistaurl."/";
  35.    
  36.                 $img = "http://biografias.music-strike.net/img_bio.php?q=".$pl[artista];
  37.                 $title = limp($mp[titulo])." - ".limp($mp[artista]);
  38.                 $id = $mp[id];
  39.                 $url = "http://mp3.music-strike.net/00".$mp[id]."/".str_replace(' ','+',str_replace('-','+',$mp[artista]))."+-+".str_replace(' ','+',str_replace('-','+',$mp[titulo]))."/";
  40.    
  41.                 $mp3[] = array(
  42.                     genero => $mp[genero],
  43.                     title => $mp[titulo],
  44.                     artista => $mp[artista],
  45.                     titulo => $title,
  46.                     id => $id,
  47.                     url => $url,
  48.                     img => "http://music-strike.net/images/icons/speaker_2.png",
  49.                     coincidencias => "1",
  50.                     );
  51.             }
  52.         }
  53.         $repons = $mp3;
  54.     }else{
  55.         $where = "";
  56.         $peque = FALSE;
  57.         foreach($trozos as $t){
  58.             if(strlen($t)<=3){
  59.                 $peque = TRUE;
  60.                 $agregar[] = $t;
  61.             }
  62.         }
  63.         if($peque==TRUE){
  64.             if(count($agregar)==$numero){
  65.                 foreach($agregar as $ag){
  66.                     $veces++;
  67.                     if($veces==1){
  68.                         $where .= "(artista LIKE '%$ag %' OR titulo LIKE '%$ag %')";
  69.                     }else{
  70.                         $where .= " AND (artista LIKE '% $ag %' OR titulo LIKE '% $ag %')";
  71.                     }
  72.                 }
  73.                 $sqlBuscar = mysql_query("SELECT id, genero, artista, titulo FROM music_local WHERE ".$where." ORDER BY id DESC LIMIT $ini,$max");
  74.             }else{
  75.                 foreach($agregar as $ag){
  76.                     $veces++;
  77.                     if($veces==1){
  78.                         $where .= "AND ((artista LIKE '% $ag %' OR titulo LIKE '% $ag %')";
  79.                     }else{
  80.                         $where .= " OR (artista LIKE '% $ag %' OR titulo LIKE '% $ag %')";  
  81.                     }
  82.                 }
  83.                 $where .= ")";
  84.                
  85.                 $sql = "SELECT id, genero, artista, titulo,
  86.                MATCH (artista, titulo)
  87.                AGAINST ('$frase' IN BOOLEAN MODE) AS c
  88.                FROM music_local
  89.                WHERE MATCH (artista, titulo)
  90.                AGAINST ('$frase' IN BOOLEAN MODE)
  91.                 ".$where." ORDER BY c DESC LIMIT $ini, $max";
  92.                 $sqlBuscar = mysql_query($sql);
  93.             }
  94.         }else{
  95.             $sql = "SELECT id, genero, artista, titulo,
  96.                MATCH (artista, titulo)
  97.                AGAINST ('$frase' IN BOOLEAN MODE) AS c
  98.                FROM music_local
  99.                WHERE MATCH (artista, titulo)
  100.                AGAINST ('$frase' IN BOOLEAN MODE)
  101.                ORDER BY c DESC LIMIT $ini, $max";
  102.             $sqlBuscar = mysql_query($sql);
  103.         }
  104.         // Para los resultados
  105.         while($mp = mysql_fetch_assoc($sqlBuscar)){
  106.             $title = limp($mp[titulo])." - ".limp($mp[artista]);
  107.             $id = $mp[id];
  108.             $url = "http://mp3.music-strike.net/00".$mp[id]."/".str_replace(' ','+',str_replace('-','+',$mp[artista]))."+-+".str_replace(' ','+',str_replace('-','+',$mp[titulo]))."/";
  109.             $mp3[] = array(
  110.                 genero => $mp[genero],
  111.                 title => $mp[titulo],
  112.                 artista => $mp[artista],
  113.                 titulo => $title,
  114.                 id => $id,
  115.                 url => $url,
  116.                 img => "http://music-strike.net/images/icons/speaker_2.png",
  117.                 coincidencias => round($mp[c])
  118.                 );
  119.         }
  120.         $repons = $mp3;
  121.     }
  122.     return $repons;
  123. }


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