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

[SOLUCIONADO] Crear funcion levenshtein en Mysql

Estas en el tema de Crear funcion levenshtein en Mysql en el foro de Mysql en Foros del Web. Saludos. Necesito hacer una busqueda con algoritmo levenshtein en un site que estoy desarrollando. Encotnre esta funcion mysql para hacer este proceso por BD y ...
  #1 (permalink)  
Antiguo 06/02/2013, 16:24
 
Fecha de Ingreso: octubre-2006
Mensajes: 12
Antigüedad: 17 años, 6 meses
Puntos: 0
Crear funcion levenshtein en Mysql

Saludos.

Necesito hacer una busqueda con algoritmo levenshtein en un site que estoy desarrollando. Encotnre esta funcion mysql para hacer este proceso por BD y no tener que hacerlo por HP consultando todos los datos y luego comparandolos, ya que seria mucho mas lento. La funcione sta en este link:

http://www.artfulsoftware.com/infotree/qrytip.php?id=552

Pero no se como hacer para usarla, como se puede definir en el mysql, alguno sabria como hacerlo?

Intente correrla por el phpmyadmin y por consola pero en las dos formas me sale error :S.

Agradezco la colaboracion.
  #2 (permalink)  
Antiguo 08/02/2013, 08:07
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Crear funcion levenshtein en Mysql

No tengo ni idea de esa función pero tu ejecutas esos dos create function y luego usas las funciones en una query... ojo que hay un texto entre los dos create....

Tienes permisos para crear funciones? Estas trabajando con mysql 5.0 o posterior?


Que error te da?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 08/02/2013 a las 08:18
  #3 (permalink)  
Antiguo 08/02/2013, 10:42
 
Fecha de Ingreso: octubre-2006
Mensajes: 12
Antigüedad: 17 años, 6 meses
Puntos: 0
Respuesta: Crear funcion levenshtein en Mysql

Hola a Todos, ya pude solucionarlo, aunque lo hice por concola, toco colocarle los delimiter y lo corri por consola y bien, aqui la funcion que hacia referencia.

Código:
DELIMITER $$
CREATE FUNCTION levenshtein( s1 VARCHAR(255), s2 VARCHAR(255) )
RETURNS INT
DETERMINISTIC
BEGIN
DECLARE s1_len, s2_len, i, j, c, c_temp, cost INT;
DECLARE s1_char CHAR;
-- max strlen=255
DECLARE cv0, cv1 VARBINARY(256);
SET s1_len = CHAR_LENGTH(s1), s2_len = CHAR_LENGTH(s2), cv1 = 0x00, j = 1, i = 1, c = 0;
IF s1 = s2 THEN
RETURN 0;
ELSEIF s1_len = 0 THEN
RETURN s2_len;
ELSEIF s2_len = 0 THEN
RETURN s1_len;
ELSE
WHILE j <= s2_len DO
SET cv1 = CONCAT(cv1, UNHEX(HEX(j))), j = j + 1;
END WHILE;
WHILE i <= s1_len DO
SET s1_char = SUBSTRING(s1, i, 1), c = i, cv0 = UNHEX(HEX(i)), j = 1;
WHILE j <= s2_len DO
SET c = c + 1;
IF s1_char = SUBSTRING(s2, j, 1) THEN
SET cost = 0; ELSE SET cost = 1;
END IF;
SET c_temp = CONV(HEX(SUBSTRING(cv1, j, 1)), 16, 10) + cost;
IF c > c_temp THEN SET c = c_temp; END IF;
SET c_temp = CONV(HEX(SUBSTRING(cv1, j+1, 1)), 16, 10) + 1;
IF c > c_temp THEN
SET c = c_temp;
END IF;
SET cv0 = CONCAT(cv0, UNHEX(HEX(c))), j = j + 1;
END WHILE;
SET cv1 = cv0, i = i + 1;
END WHILE;
END IF;
RETURN c;
END$$
DELIMITER ;

Etiquetas: funcion, php, sql
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 20:07.