Hey Leute.
Da ich das grade selber brauchte habe ich die PHP Funktion similar_text jetzt mal in eine MySql Funktion umgeschrieben, sodass sie mit einer MySql Query nutzbar ist.
Die Funktion vergleicht 2 Strings und gibt einen Wert in Prozent zurück, der aussagt wie viele Buchstaben des Strings übereinstimmen.
Das ganze wird dann so benutzt:
SELECT similar_text(title, 'The title to compare') AS similarity FROM node ORDER BY similarity DESC
Wenn ihr den am besten passenden Eintrag erhalten wollt hängt ihr einfach noch ein LIMIT 0,1 ran.
Hier die Insert Query womit ihr diese Funktion in eurer Datebank einfügt und nutzbar macht.
Code
- CREATE DEFINER=`root`@`localhost` FUNCTION `similar_text`(`text1` VARCHAR(255), `text2` VARCHAR(255)) RETURNS double
- NO SQL
- DETERMINISTIC
- BEGIN
- DECLARE len1, len2, i, j, l, sim, max INT DEFAULT 0;
- SET len1 = LENGTH(text1);
- SET len2 = LENGTH(text2);
- WHILE i < len1 DO
- WHILE j < len2 DO
- SET l = 0;
- WHILE (i + l < len1) && (j + l < len2) && (MID(text1, i + l, 1) = MID(text2, j + l, 1)) DO
- SET l = l + 1;
- END WHILE;
- SET i = i + l;
- SET j = j + l + 1;
- SET sim = sim + l;
- END WHILE;
- SET i = i + 1;
- END WHILE;
- RETURN ((sim * 200.0) / (len1 + len2));
- END
Viel Spass damit
Gruß Sick^
Edit:
1. Fix zu hohe prozentzahlen.
2. Fix iteration + falsche prozente