我的数据库中有一个MySQL函数,它计算两个字符串之间的Levenstein距离。levenstein("str1","str2"), returns INT
我有一个充满字符串的表,我希望我的查询将最相关的行返回到输入字符串(如果有的话)。我的查询如下:
SELECT * FROM my_table
WHERE levenshtein('John',name) <= 15
ORDER BY date DESC`
如您所见,Levenstein距离在WHERE
子句中使用。该函数本身运行良好。
但在我的结果中,我也希望有一列,每行与"John"
的特定Levenstein距离。它是在WHERE
子句中计算的,我如何更改查询以实际存储它,并使它与其他结果一起出来?
使用子查询,并过滤结果:
SELECT name, score FROM (
SELECT name, levenshtein('John', name) AS score, date
FROM my_table
) AS t
WHERE t.score <= 15
ORDER BY date DESC
这会将函数的结果作为外部查询中的一个普通列,因此您可以根据它进行筛选、排序等。
您可以在字段列表中使用函数
SELECT *,levenshtein('John',name) as lev FROM my_table
HAVING lev <= 15
ORDER BY date DESC
以下是SQLFiddle,它说明了这个概念:http://sqlfiddle.com/#!9/6274e2/2
您可以将计算放入您的选择中,命名它,并在hasing子句中引用它:
SELECT
*, levenshtein('John',name) as lev
FROM my_table
HAVING
lev <= 15
ORDER BY
date DESC;