也许这是一个愚蠢的问题,但想象一下有一个表格,如:
wholename, lastname, firstname, dateOfBirth
现在我想根据用户输入搜索该表,但我想给结果一个匹配%。含义:
如果在数据库matchPrct = 100中找到lastname + firstname + dateOfBirth。 如果在数据库matchPrct = 80中找到lastname + dataofBirth。 还有一些其他规则(换句话说,字段matchPrct是一个自动生成的字段,它实际上不在数据库中)。
我希望实现的SQL是:
SELECT * FROM table
WHERE firstname="%mike%" AND lastname="%tysson%" AND dateOfBirth="01/01/2012"
(create matchPrct=100) OR ....
希望我的意思很清楚。
答案 0 :(得分: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,但值得记住。