ホームページ >データベース >mysql チュートリアル >MySQL でレーベンシュタイン距離関数を実装するにはどうすればよいですか?
MySQL へのレーベンシュタイン関数の追加
MySQL で、レーベンシュタイン距離などのカスタム関数を追加するには、ストアド プロシージャまたは関数を作成する必要があります。ただし、次の手順に従って、参照されている WordPress 投稿で提供されているコードを利用できます:
DELIMITER $$ CREATE FUNCTION levenshtein(str1 VARCHAR(255), str2 VARCHAR(255)) RETURNS INT DETERMINISTIC BEGIN DECLARE str1len, str2len, i, j, cost, c, vtemp INT; DECLARE vmatrix VARCHAR(255); CALL max(length(str1), length(str2), str1len, str2len); SET vtemp = power(2, str2len) * power(2, str1len); SET vmatrix = LPAD('0', vtemp, '0'); SET i = 1; WHILE i <= str1len DO SET t = SUBSTR(str1, i, 1); SET j = 1; WHILE j <= str2len DO SET s = SUBSTR(str2, j, 1); IF i = 1 THEN CALL min3(j, vmatrix, i * j, j + 1); END IF; IF j = 1 THEN CALL min3(i, vmatrix, i, i * str2len + j); END IF; SET cost = IF(t = s, 0, 1); CALL min3(vmatrix, vmatrix, cost + vmatrix, i * str2len + j); CALL min3(i, vmatrix, vmatrix, i * str2len + j + 1); CALL min3(j, vmatrix, vmatrix, (i + 1) * str2len + j); SET j = j + 1; END WHILE; SET i = i + 1; END WHILE; RETURN vmatrix; END $$ DELIMITER ;
SELECT levenshtein('abcde', 'abced');
例:
クエリは 2 を返し、'abcde' と 'abced' の間のレーベンシュタイン距離が 2 であることを確認します。
での使用法PHP:
MySQL への接続時に PHP 内で Levenshtein 関数を使用するには、次のコードを実行できます:
$sql = 'SELECT levenshtein(?, ?) AS distance'; $stmt = $conn->prepare($sql); $stmt->bind_param('ss', $str1, $str2); $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { $distance = $row['distance']; }
以上がMySQL でレーベンシュタイン距離関数を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。