0

也许这是一个愚蠢的问题,但想象一下有一个包含以下字段的表格:

wholename, lastname, firstname, dateOfBirth

现在我想根据用户输入搜索该表,但我想为结果提供匹配百分比。意义:

如果 lastname + firstname + dateOfBirth 都在数据库中找到 matchPrct = 100。如果 lastname + dataofBirth 在数据库中找到 matchPrct = 80。还有一些其他规则(换句话说,字段 matchPrct 是一个自动生成的字段,它不是真的在分贝中)。

我想要实现的 SQL 是:

SELECT * FROM table 
WHERE firstname="%mike%" AND lastname="%tysson%" AND dateOfBirth="01/01/2012"
(create matchPrct=100) OR ....

希望我的意思很清楚。

4

1 回答 1

0

LIKE 是一个返回布尔值的运算符,=行为类似。MySQL 中的布尔值是 1 表示真,0 表示假。这意味着你可以这样说:

select *,
      ((firstname like '%mike%') + (lastname like '%tysson%') + (dateOfBirth = '01/01/2012')) / 3.0 as score
from table
where firstname like '%mike%'
   or lastname like '%tysson%'
   or dateOfBirth = '01/01/2012'

然后从score. 您还可以对每个组件应用单独的权重,以便姓氏匹配比名字匹配更重要。

在不使用 1 和 0 作为布尔值的数据库中,您可以转换它们或使用 CASE 将布尔值转换为您想要的数字。这当然不适用于 MySQL,但值得牢记。

于 2012-11-26T04:40:16.397 回答