Foros del Web » Programando para Internet » PHP »

como hacer una busqueda a base datos pasando mas de una palabra clave

Estas en el tema de como hacer una busqueda a base datos pasando mas de una palabra clave en el foro de PHP en Foros del Web. Hola utilizo este codigo encontrado en el foro, para hacer un buscador a base de datos, solo ha de buscar en los campos de la ...
  #1 (permalink)  
Antiguo 10/03/2008, 11:41
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
como hacer una busqueda a base datos pasando mas de una palabra clave

Hola utilizo este codigo encontrado en el foro, para hacer un buscador a base de datos,
solo ha de buscar en los campos de la BD

name
description

cuando pongo solo una palabra el script fuunciona,
pero cuando pongo dos palabras me da error.

Alguen sabe que hago mal en la consulta?

Código PHP:

$busqueda
=$_POST['palabra'];
 echo 
$busqueda//imprime bien la variable
 
 
if ($busqueda<>''){ 
  
//CUENTA EL NUMERO DE PALABRAS 
  
$trozos=explode(" ",$busqueda); 
  
$numero=count($trozos); 
  if (
$numero==1) { 
    
//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE 
    
$_pagi_sql="SELECT name, description FROM archivos WHERE description =1 
      AND name LIKE  '%$busqueda%' OR description LIKE  '%$busqueda%' ORDER  BY name ASC"

  } 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 
    
$_pagi_sql="SELECT  name, description MATCH (  name,description ) 
      AGAINST (  '$busqueda' ) FROM archivos WHERE 
      MATCH ( name,description ) AGAINST (  '$busqueda' ) ORDER  BY name ASC"

  } 
  
$_pagi_result mysql_query($_pagi_sql $conexion) or die ( mysql_error() ); 
y este es el error
Código PHP:

You have an error in your SQL syntax
check the manual that corresponds to your MySQL server version for the right syntax to use near 'MATCH ( name,description ) AGAINST ( 'manual cromoterapia' ) FROM arch' at line 1 
He buscado en el manual de php en español sobre la sintaxis de Mysql pero esque no me entero de donde esta el fallo.

Gracias.
  #2 (permalink)  
Antiguo 10/03/2008, 11:44
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: como hacer una busqueda a base datos pasando mas de una palabra clave

Te falta una coma después de descripción:
Código PHP:
$_pagi_sql="SELECT  name, description, MATCH (  name,description ) 
      AGAINST (  '$busqueda' ) FROM archivos WHERE 
      MATCH ( name,description ) AGAINST (  '$busqueda' ) ORDER  BY name ASC"

Saludos.
  #3 (permalink)  
Antiguo 10/03/2008, 11:57
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Re: como hacer una busqueda a base datos pasando mas de una palabra clave

Gracias GatorV, es dificil ver tan rapido esa coma, sobre todo para alguien, quien me imagino, tiene delante todos los dias muchas lineas de codigo.

pero ahora me sale este error

Código PHP:
manual cromoterapiaThe used table type doesnt support FULLTEXT indexes 
es el tipo de tabla?

el tipo de tabla es innoDB

cual deberia de usar?

tambien tengo:

MyISAM
MEMORY
ARCHIVE
MRG_MyISAM

GRACIAS.
  #4 (permalink)  
Antiguo 10/03/2008, 12:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: como hacer una busqueda a base datos pasando mas de una palabra clave

El único Engine que se que soporta FullText es MyISAM.

Saludos.
  #5 (permalink)  
Antiguo 10/03/2008, 12:37
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Re: como hacer una busqueda a base datos pasando mas de una palabra clave

Gracias GatorV

La verdad es que lo he estado haciendo, el cambiar el tipo de tabla a MyISAM

y despues de hacerlo ha cambiado el error y he comprovado que las palabras a buscar esten en los campos y estan pero da este error y no se si es del script

Código PHP:
curso completoCant find FULLTEXT index matching the column list 

Última edición por jaronu; 10/03/2008 a las 12:48
  #6 (permalink)  
Antiguo 10/03/2008, 12:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: como hacer una busqueda a base datos pasando mas de una palabra clave

No es problema de tu script, es que no encuentra el índice FULL TEXT, deberías de re-hacer los índices y asegurarte que tu tabla sea InnoDB.

Saludos.
  #7 (permalink)  
Antiguo 10/03/2008, 13:11
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Re: como hacer una busqueda a base datos pasando mas de una palabra clave

Cita:
Iniciado por GatorV Ver Mensaje
No es problema de tu script, es que no encuentra el índice FULL TEXT, deberías de re-hacer los índices y asegurarte que tu tabla sea InnoDB.

Saludos.
Muchas gracias por contestar, pero es que ahora no me entero,

He cambiado la tabla a MyISAM, bueno he hecho una nueva

pero ahora me dices arriba "y asegurarte que tu tabla sea InnoDB"

que ha de ser InnoDB o MyISAM

y es que no entiendo eso de re-hacer los indices, donde podria encontrar informacion sobre el tema.

Gracias.
  #8 (permalink)  
Antiguo 10/03/2008, 13:16
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: como hacer una busqueda a base datos pasando mas de una palabra clave

Perdón escribí mal, asegurate que sea MyISAM. InnoDB no soporta FULL TEXT. Para más información puedes preguntar en el foro de Base de Datos, o ver el manual de MySQL.

Saludos.
  #9 (permalink)  
Antiguo 10/03/2008, 14:36
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Re: como hacer una busqueda a base datos pasando mas de una palabra clave

He hecho una tabla nueva tipo MyISAM, con el campo description que es el que quiero usar de busqueda como indice FULLTEXT, y despues empece a entrarle datos,

la busqueda con una palabra la sigue haciendo bien pero ahora cuando pongo dos palabras para hacer la busqueda, ya no da error, simplemente no devuelve resultados.
Me he asegurado de que las dos palabras esten en el campo de la BD, pero no devuelve resultados.

Alguien sabe porque?
U otra manera de hacer la busqueda con mas de una palabra?

Gracias.

el codigo lo he dejado asi:


Código PHP:

$busqueda
=$_POST['palabra'];

 
 if (
$busqueda<>''){ 
  
//CUENTA EL NUMERO DE PALABRAS 
  
$trozos=explode(" ",$busqueda); 
  
$numero=count($trozos); 
  if (
$numero==1) { 
    
//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE 
    
$_pagi_sql="SELECT name, description FROM descargas WHERE description =1 
      AND name LIKE  '%$busqueda%' OR description LIKE  '%$busqueda%' ORDER  BY name ASC"

  } 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 
    
$_pagi_sql="SELECT   description, MATCH (   description ) 
      AGAINST (  '$busqueda' ) FROM descargas WHERE 
      MATCH (  description ) AGAINST (  '$busqueda' ) ORDER  BY name ASC"

  } 
  #10 (permalink)  
Antiguo 10/03/2008, 15:51
 
Fecha de Ingreso: marzo-2007
Ubicación: España
Mensajes: 133
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: como hacer una busqueda a base datos pasando mas de una palabra clave

Hola jaronu

Yo creo el indice fulltext asi.

$anadirfulltext="ALTER TABLE descargas ADD FULLTEXT (camposquequieresquetenganfulltext)";
mysql_query ($afegirfulltext,$db);

eso en un .php

Luego puedes probar una consulta mas sencilla para ver que te funciona el FULLtext y te devuelve algun resulado:

$cons="SELECT * FROM catàleg WHERE Registre > 0 AND MATCH (camposfulltext) AGAINST ('$busqueda');
mysql_query($cons,$link)

prueba con eso q creo que es mas basico y me cuentas ;)
  #11 (permalink)  
Antiguo 10/03/2008, 16:31
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Re: como hacer una busqueda a base datos pasando mas de una palabra clave

hola Elisa85

como me has dicho he hecho un archivo con el primer codigo que me enviaste,

Código PHP:
$anadirfulltext="ALTER TABLE descargas ADD FULLTEXT (camposquequieresquetenganfulltext)";
mysql_query ($afegirfulltext,$db); 
lo cargo y no me da ningun tipo de error,
despues he cambiado la consulta como pusistes, deje la consulta asi:

Código PHP:

if ($busqueda<>''){ 
  
//CUENTA EL NUMERO DE PALABRAS 
  
$trozos=explode(" ",$busqueda); 
  
$numero=count($trozos); 
  if (
$numero==1) { 
    
//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE 
    
$_pagi_sql="SELECT name, description FROM descargas WHERE description =1 
      AND name LIKE  '%$busqueda%' OR description LIKE  '%$busqueda%' ORDER  BY name ASC"

  } 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 
    
$_pagi_sql="SELECT * FROM descargas WHERE description > 0 AND MATCH (description) AGAINST ('$busqueda')"
  } 
pero no me devuelve ningun resultado, con una palabra si, como dije antes, pero al poner dos, que estan en el campo description, me he asegurado, no devuelve resultados, estan paginados con la clase de Jpinedo, he provado a quitar la paginacion y tampoco devuelve resultados.

Gracias por contestar, pero no tendras alguna otra sugerencia??
  #12 (permalink)  
Antiguo 10/03/2008, 21:37
Avatar de xyyy7  
Fecha de Ingreso: enero-2004
Ubicación: Maracay.-
Mensajes: 637
Antigüedad: 20 años, 3 meses
Puntos: 5
Re: como hacer una busqueda a base datos pasando mas de una palabra clave

Amigo aqui tienes un foro donde se a tratado bastante este tema el tipo de Busqueda FullText

http://www.fabio.com.ar/verpost.php?id_noticia=959

Saludos.-
__________________
Maracay Edo Aragua - Venezuela :
Mi Favorita :
http://www.MySQL.Com
  #13 (permalink)  
Antiguo 11/03/2008, 05:06
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Re: como hacer una busqueda a base datos pasando mas de una palabra clave

Gracias por responder xyyy7,

esta muy bien el link que me has dejado, te lo agradezco, me ha aclarado algunas dusas que tenia sobre los indices, pero no ha resuelto mi problema,

Como decirlo........, el problema se ha resuelto, SOLO.

Ayer tenia una tabla tipo InnoDB con 50 registros, y como ese tipo de tabla no sirve para indices fulltext, la borre.

No, le exporte por que no me interesaba su estructura, y al crear la tabla nueva tipo MyISAM, solo inserte 3 registros, y no funcionaba la busqueda,

Ahora he insertado 7 mas, osea 10 en total, Y funciona la busqueda perfectamente.

Gracias a todos por vuestro interes, y por si a alguien le intresa deje a si la consulta:

Código PHP:
$resultado="SELECT * , MATCH(name, description) AGAINST ('$busqueda') as Score FROM descargas
                        WHERE MATCH (name, description) AGAINST ('$busqueda') ORDER BY Score DESC"

Gracias de nuevo
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 14:22.