![Antiguo](http://static.forosdelweb.com/fdwtheme/images/statusicon/post_old.gif)
02/09/2006, 13:06
|
| | Fecha de Ingreso: agosto-2006
Mensajes: 121
Antigüedad: 18 años, 6 meses Puntos: 0 | |
Tienes que añadir al menos un índice a la tabla del tipo fulltext. En éste pueden formar parte campos de tipo 'cadena' (char, varchar, text). En tu caso, podrías poner uno con titulo y mensaje así:
ALTER TABLE `anuncios` ADD FULLTEXT (
`titulo` ,
`mensaje`
)
Luego, para hacer búsquedas fulltext tienes que usar algo como esto:
SELECT * FROM anuncios WHERE MATCH (titulo, mensaje) AGAINST ('texto a buscar');
Lo que hace esto es buscar con la condición de que se obtenga un cierta puntuación dada una fila de la tabla, con lo que una puntuación igual a cero no aparecerá como resultado. Es posible, por tanto, obtener esta puntuación de resultados, para conocer la relevancia de las coincidencias (buscando por 'Base de datos MySQL' no es tan revante algo como 'La base de datos Oracle...' com 'MySQL es el motor de base de datos más rápido...'). Para conseguirlo se puede añadir la sintaxis anterior a la cláusulala cláusula select:
SELECT *, MATCH (titulo, mensaje) AGAINST ('texto a buscar'); FROM anuncios WHERE MATCH (titulo, mensaje) AGAINST ('texto a buscar');
Esto añade un campo a la consulta que muestra la puntuación de los resultados. Entonces no es mala idea rematarlo con un ORDER BY descendente, para que aparezcan primero los más relevantes:
SELECT *, MATCH (titulo, mensaje) AGAINST ('texto a buscar') FROM anuncios WHERE MATCH (titulo, mensaje) AGAINST ('texto a buscar') ORDER BY MATCH (titulo, mensaje) AGAINST ('texto a buscar');
Usando un alias para esta sintaxis un tanto copiosa nos queda esto:
SELECT *, MATCH (titulo, mensaje) AGAINST ('texto a buscar') as Puntos FROM anuncios WHERE MATCH (titulo, mensaje) AGAINST ('texto a buscar') ORDER BY Puntos |