Ver Mensaje Individual
  #16 (permalink)  
Antiguo 17/12/2014, 06:15
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: una manera mejor de hacer esta consulta

Tienes que entender la idea central del MATCH() AGAINST(): Sólo funciona si:
1) Las palabra son palabras completas de cinco o más caracteres.
2) Existe un índice FULLTEXT que se defina por todas las columnas donde se hará la búsqueda.
3) Si el servidor de MySQL no es una versión 5.6 o superior, no funcionará con tablas InnoDB, sino sólo con las MyISAM.

MATCH() AGAINST() realiza comparaciones jerarquizadas por relevancia, lo que implica que devolverá aquellos registros donde las palabras buscadas se encuentren todas o una parte de ellas, ponderando la aparicion de esas palabras en las columnas contra las que se compara.
No busca por patrones, por lo que no sirve si los datos buscados son parciales.
Tampoco es eficiente para comparar textos mayores, ya que podrían no sólo bloquear al servidor al tener que ponderar demasiados datos, o no devolver nada, porque la ponderación tienda a cero dada la longitud de los textos a comparar.

Por otro lado a ese INNER JOIN le falta el ON y la condición de coincidencia que no debe ser el MATCH() AGAINST() porque los resultados erán erróneos.
Una relación por JOIN tiene que ser una relación segura, no una aproximación. de lo contrari opodrías obtener un producto cartesiano, lo que es el peor escenario posible de una consulta.

¿Queda más claro?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)