MySQL查询带有基于WHERE的额外手动输出

时间:2012-11-26 04:27:32

标签: mysql sql

也许这是一个愚蠢的问题,但想象一下有一个表格,如:

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 ....

希望我的意思很清楚。

1 个答案:

答案 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,但值得记住。