Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Busqueda Con Fulltext

Estas en el tema de Busqueda Con Fulltext en el foro de Mysql en Foros del Web. tengo un problema a la hora de hacer una busqueda en mi BBDD. Es una consulta general de posibles combinaciones, como por ejemplo: "picos de ...
  #1 (permalink)  
Antiguo 03/04/2008, 11:25
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 37
Antigüedad: 19 años, 2 meses
Puntos: 1
Busqueda Con Fulltext

tengo un problema a la hora de hacer una busqueda en mi BBDD. Es una consulta general de posibles combinaciones, como por ejemplo: "picos de europa"

aqui la sentencia sql:
Código PHP:

SELECT 
FROM TABLA WHERE MATCH (nombre,localidad,comarca,provincia,descripcion,visitar,otrosAGAINST ('*". $busqueda ."*' IN BOOLEAN MODEORDER BY id 
el problema reside que el resultado de la busqueda, en este caso, da indistintamente que una fila solo tenga "picos" y otra fila "europa", me los muestra todos, pero que no tiene nada que ver con los "picos de europa".

y yo sólo quiero que me muestre las filas que tenga la cadena de texto "picos de europa" junto, en cualquier de los campos del fulltext.

como lo puedo hacer? mil gracias !
  #2 (permalink)  
Antiguo 03/04/2008, 11:57
 
Fecha de Ingreso: marzo-2008
Ubicación: SanTelmo City
Mensajes: 12
Antigüedad: 16 años, 1 mes
Puntos: 1
Re: Busqueda Con Fulltext

Prueba con esta consulta
Código:
SELECT * FROM tabla WHERE campo LIKE '%picos de europa%'


Saludos
  #3 (permalink)  
Antiguo 03/04/2008, 11:59
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: Busqueda Con Fulltext

Tema trasladado a MySQL.
  #4 (permalink)  
Antiguo 03/04/2008, 13:47
 
Fecha de Ingreso: noviembre-2002
Ubicación: http://localhost/
Mensajes: 195
Antigüedad: 21 años, 5 meses
Puntos: 1
Re: Busqueda Con Fulltext

Creo que el problema es como dice Synkro.

Aqui tienes:

AGAINST ('*". $busqueda ."*' IN BOOLEAN MODE)

pero deberia ser % en lugar de *, algo asi:

AGAINST ('%". $busqueda ."%' IN BOOLEAN MODE)

Segun yo jeje, prueba y nos dejas saber
__________________
http://www.ingenierosinc.com
  #5 (permalink)  
Antiguo 05/04/2008, 08:52
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Re: Busqueda Con Fulltext

Deckard,
yo tengo otra propuesta. Creo que la mezcla de PHP y MySQL es lo que ha causado el problema. Una búsqueda exacta de texto IN BOOLEAN MODE requiere esto: '"cadenabuscada"'
Y tú tienes que introducirlo en PHP y para eso tienes que escapar la " de expresión literal.
Hazlo así:

$SQL="SELECT * FROM TABLA WHERE MATCH (nombre,localidad,comarca,provincia,descripcion,vi sitar,otros) AGAINST ('\"$busqueda\"' IN BOOLEAN MODE) ORDER BY id";

A ver si consigues lo que quieres.

Última edición por jurena; 05/04/2008 a las 13:31
  #6 (permalink)  
Antiguo 06/04/2008, 02:42
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Re: Busqueda Con Fulltext

Deckar,
escribo otra vez para darte la solución que creo más acertada, pues en mi opinión hacer lo que estás haciendo con una búsqueda IN BOOLEAN MODE es desperdiciar toda la potencialidad del índice y obligarlo a hacer siempre lo que una búsqueda con like normal haría.
Tú puedes encontrar perfectamente una cadena fija o una parte sí, otra no, usando los operadores de IN BOOLEAN MODE ", +, -, etc.
Tú problema lo tienes realmente con PHP, pues para introducir las comillas, el +, el - de IN BOOLEAN MODE, el mejor lugar sería el formulario que te recoge la variable. Es decir, si quieres hacer una búsqueda exacta, debes escribir en el apartado del formulario, en tu input de texto, las comillas, "Picos de Europa". Pero para poder hacer eso, necesitas escapar esas comillas para hacer la consulta, y para eso tienes la función addslashes.
$busqueda=addslashes($_POST['busqueda']);
luego introduces $busqueda en la cadena de consulta tal cual
$SQL="SELECT * FROM TABLA WHERE MATCH (nombre,localidad,comarca,provincia,descripcion,vi sitar,otros) AGAINST ('$busqueda' IN BOOLEAN MODE) ORDER BY id";
y
y ya está. Con ello ya no buscará tu índice la cadena exacta si tú no quieres hacerlo y podrás utilizar todo su potencial sirviéndote de los operadores.
Este es mi consejo, realmente un consejo PHP (pido disculpas a los moderadores), pero eso evitará un mal uso del FULLTEXT en MySQL
Suerte.
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:50.