MySQL查询,基于WHERE提供额外的手动输出

MySQL查询,基于WHERE提供额外的手动输出,mysql,sql,Mysql,Sql,也许这是一个愚蠢的问题,但想象一下有一个包含如下字段的表: wholename, lastname, firstname, dateOfBirth 现在我想根据用户输入搜索该表,但我想给结果一个匹配百分比。意思是: 如果lastname+firstname+dateOfBirth都在数据库matchPrct=100中找到。 如果在数据库matchPrct=80中找到lastname+dataofBirth。 还有一些其他规则(换句话说,字段matchPrct是一个自动生成的字段,实际上不在数据

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

wholename, lastname, firstname, dateOfBirth
现在我想根据用户输入搜索该表,但我想给结果一个匹配百分比。意思是:

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

我希望实现的SQL是:

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

希望我的意思很清楚。

类似于返回布尔值的运算符,
=
的行为类似。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'
然后从
得分
中读取您的“匹配程度”值。您还可以对每个组件应用单独的权重,以便姓氏匹配比姓氏匹配更重要


在不使用1和0作为布尔值的数据库中,可以强制转换它们,或者使用CASE将布尔值转换为所需的数字。这当然不适用于MySQL,但值得记住。

你能解释一下你想要实现的所有规则吗。让我重新表述这个问题以供理解……如果在表中找到了所有用户输入值,那么matchPrct=100,如果找到了2个值,那么只找到了它的80个值,那么这是需要的其他百分比值吗?我建议使用来自的
分数
,我有一个包含详细信息的大型名称列表(如上面的字段)然后,用户将在表单中输入一些信息。结果基于用户输入的内容。问题是,这最终不是一个单一的结果。我所要做的不仅仅是找到最好的匹配,也要找到可能是他们要找的人的匹配。换言之,用户可能输入了错误的姓名详细信息,但出生日期是正确的。我知道可能性很大,但根据法律规定,我也必须展示这些信息,并让用户选择是否是此人。因此,找到的任何字段都是一个点,字段越多,匹配的点就越多。(因为越有可能是他们要找的人)另外,我需要非常快的查询时间,因为用户可能一次搜索很多名字。谢谢你的快速回复。从来没有想过把它放在选择。这种性能如何?有什么想法吗?@renevdkooi:你得问问数据库,它可能足够聪明,可以识别重复的组件,但可能没有。