Php 按匹配的准确性顺序搜索名字和姓氏

Php 按匹配的准确性顺序搜索名字和姓氏,php,mysql,search,sql-like,Php,Mysql,Search,Sql Like,我正在尝试在我的网站上建立一个简单的搜索(这是一个社交网站),我想搜索在该网站上注册的所有用户,并返回一个建议列表(这就是这个查询的目的,建议列表) 我要搜索的表包含以下列:userID,fname,lname 我想搜索最后两列(两个名称),并按名称与搜索词匹配的程度返回它们 我将运行的查询的第一部分是: SELECT userID, fname, lname FROM names WHERE 但是剩下的,我需要帮助 编辑: 使用此查询搜索: SELECT userID, fname, lna

我正在尝试在我的网站上建立一个简单的搜索(这是一个社交网站),我想搜索在该网站上注册的所有用户,并返回一个建议列表(这就是这个查询的目的,建议列表)

我要搜索的表包含以下列:
userID
fname
lname

我想搜索最后两列(两个名称),并按名称与搜索词匹配的程度返回它们

我将运行的查询的第一部分是:

SELECT userID, fname, lname FROM names WHERE
但是剩下的,我需要帮助

编辑: 使用此查询搜索:

SELECT userID, fname, lname FROM names WHERE fname LIKE '%".$term."%' OR lname LIKE '%".$term."%'
我如何对其排序,使结果按匹配项在开头的排序,这样当我键入
M
时,它返回say,
Mark
before
adam
类似的内容:

where fname like '%' + @searchterm + '%' or lname like '%' + @searchterm + '%'

你应该研究使用搜索的名称。全文搜索将允许您考虑匹配中的相似性。

< P>您可以在查询语句的结尾用FNEAR ASC进行排序(假定您的DB语句的语法工作,它看起来像某种SQL,所以应该有类似的工作)。这将按字母顺序对姓名进行排序,以便Steve出现在Steven之前(因为缺少“n”)。我也猜,如果你想找到基于第一个字母或前几个字母的东西,可能有一个等价的地方,你可以使用m*和星号将是你的通配符。我希望这有帮助

你可以试试

SELECT userID, fname, lname,
myRank = CASE WHEN fname = @term THEN 4 
WHEN fname like @term + '%' THEN 3
WHEN fname like '%' + @term + '%' THEN 2
ELSE.... whatever ranking you want
FROM names 
WHERE fname LIKE '%' + @term + '%' 
   OR lname LIKE '%' + @term + '%'
ORDER BY myRank DESC

我最近遇到了一个类似的问题,并使用了。从那里开始,我实现了一个基于word的。我的实现将“海绵宝宝Squarepants”与“Squarepants,Bob”匹配

如果您没有visual studio(创建sql server中使用的程序集需要visual studio),还可以使用本机t-sql实现所需的功能(即模糊字符串匹配)。可以找到一个很好的工具包

更新:
注意:相似性字符串匹配不适用于增量搜索,即“M”与“Mark”不匹配。您必须使用其他尝试,可能是模糊字符串匹配的组合,并将其分类为“开始于”、“包含”等。

是的,这将是它的第一部分,但我不完全确定如何按匹配百分比对这些结果进行排序。例如,如果搜索词是
Steve
,并且有一个
Steve
steven
,我希望
steven
steven
之前返回,如果您查看我编辑的问题,这将显示我正在尝试完成的更多内容。