Calcular número de coincidencias en una cadena de texto

Montando un buscador, me han pedido que ordene los resultados por el número de coincidencias dentro del texto, esto se puede hacer con MATCH AGAINST pero implica que la búsqueda se centraría en un campo de texto que tenga un índice FULLTEXT, el problema es que en mi caso es una vista y tiene que buscar en una concatenación de campos por lo que queda descartada esta opción.

La solución la he hecho con una función para contabilizar el número de ocurrencias dentro de la cadena.

DELIMITER $$
CREATE FUNCTION `num_coincidencias`(
        texto  text ,
        palabra  varchar(100)
    )
    RETURNS int
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN    
	return ROUND ((LENGTH(texto) - LENGTH( REPLACE ( lower(texto), lower(palabra), ""))) / LENGTH(palabra));
END;
$$
DELIMITER ;


-- y asi podríamos usarlo
select num_coincidencias('bla bla bla saf gsdafg sdfg bla', 'bla') as numero_blas
Dejar un comentario?

0 Comentarios.

Deje un comentario


NOTA - Puede usar estosHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.