Foros del Web » Programando para Internet » PHP »

problema con buscador php mysql

Estas en el tema de problema con buscador php mysql en el foro de PHP en Foros del Web. Realizo esta una busqueda de un producto y todo va bien por ejemplo pongo "coche nuevo" y me aparecen todos los resultados con coche nuevo. ...
  #1 (permalink)  
Antiguo 16/02/2012, 06:16
Avatar de alfoner  
Fecha de Ingreso: abril-2009
Mensajes: 146
Antigüedad: 15 años
Puntos: 0
Exclamación problema con buscador php mysql

Realizo esta una busqueda de un producto y todo va bien
por ejemplo pongo "coche nuevo" y me aparecen todos los resultados con coche nuevo.
Pero el problema es que si algun producto tiene puesto "coche es nuevo" ese registro no me aparece.

¿por que?


$busqueda=mysql_query("SELECT * FROM productos WHERE titulo LIKE '%".$_REQUEST["busqueda"]."%' ORDER BY id DESC ");
  #2 (permalink)  
Antiguo 16/02/2012, 06:56
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 12 años, 5 meses
Puntos: 160
Respuesta: problema con buscador php mysql

Porque el like con %% significa que contenga, es decir que no importa con que empieze ni con que termine. Si vos ingresas una cadena que no la encuentra dentro de la descripcion, te va a devolver vacio. Vos estas buscando una cadena compuesta por 2 strings, esa cadena debe de existir.

Cuando vos buscas coche es nuevo en la descripcion deberia haber datos asi para que te devuelva datos:

mi coche es nuevo
coche es nuevo es el mio
cuando un coche es nuevo pasa tal cosa.
etc.

En cambio si hay datos de este tipo no devolveria nada:

coche nuevo es mio
mi coche nuevo es algo muy bueno

Espero que te haya servido!
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #3 (permalink)  
Antiguo 16/02/2012, 07:00
Avatar de alfoner  
Fecha de Ingreso: abril-2009
Mensajes: 146
Antigüedad: 15 años
Puntos: 0
Respuesta: problema con buscador php mysql

Si...eso lo entiendo perfectamente. el problema es saber que tendria que poner si lo que quiero que al poner "coche nuevo" me muestre todos los resultados que contenga coche y nuevo independiente de su posición en la frase y si lleva alguna palabra por medio como "el coche era nuevo"
  #4 (permalink)  
Antiguo 16/02/2012, 08:10
 
Fecha de Ingreso: febrero-2012
Mensajes: 66
Antigüedad: 12 años, 2 meses
Puntos: 10
Respuesta: problema con buscador php mysql

Buenas,
si te da igual que las palabras que el usuarios busque este separadas o juntas, lo que debes hacer es $busqueda=explode(" ",$_REQUEST["busqueda"]). Esto crea un array con las palabras que ha encontrado separadas por un espacio en blanco.
La consulta SQL quedaría así:
$largoArray=count($busqueda);
$consulta="SELECT * FROM productos WHERE (titulo='%".$busqueda[0]."%'
for($i=1;$i<$largoArray;$i++){
$consulta.=" AND titulo='%".$busqueda[$i]."%' ";
}
$consulta.=") ORDER BY id DESC ";

También podrías separar la cadena por las comas, puntos o lo que quieras. Otra recomendación es que no uses $_REQUEST y uses el método que se está usando para mandar los datos, ya sea $_POST o $_GET, supongo que si es un buscador será $_GET.
  #5 (permalink)  
Antiguo 16/02/2012, 08:13
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: problema con buscador php mysql

prueba con MATCH AGAINST... antes de implementar esto, deberas saber que el MATCH AGAINST solo funciona con campos tipo FULLTEXT KEY en la BD, asi que te recomiendo leer un poquito al respecto en google.. o vas a tu BD y cambias tus campos a FULLTEXT, al menos en los que buscas las coincidencias.

te dejo un ejemplo de funcionamiento, pero deberas adaptarlo.. si es que comprendes lo que te dije mas arriba:

Código PHP:
$palabras$_REQUEST["busqueda"];

$buscar mysql_real_escape_string($palabras);

 
//CUENTA EL NUMERO DE PALABRAS
   
$trozos=explode(" ",$buscar);
   
$numero=count($trozos);

  if(
$numero == 1) {
   
//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
  
$query_Rs="SELECT * FROM productos
   WHERE titulo LIKE LOWER('%$buscar%') 
   ORDER BY id DESC" 
;

  } elseif(
$numero 1) {
  
//SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
  //busqueda de frases con mas de una palabra y un algoritmo especializado

$query_Rs "SELECT *
            MATCH (titulo)
            AGAINST ('$buscar' IN BOOLEAN MODE) AS coincidencias
            FROM productos
            WHERE MATCH (titulo)
            AGAINST ('$buscar' IN BOOLEAN MODE)
            ORDER BY coincidencias DESC"
;
            } 
en este caso, titulo es el campo FULLTEXT donde se va a desarrollar el algoritmo Match Against..
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...

Etiquetas: mysql, registro, sql, buscadores
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:11.