我正在尝试在我的网站(这是一个社交网站)上构建一个简单的搜索,我想搜索在该网站上注册的所有用户,并返回一个建议列表(这是该查询的用途,建议清单)。
我要搜索的表格包含以下列:userID
,fname
,lname
。
我想搜索最后2列(2个名称),并按照有多少名称与搜索词匹配的顺序返回它们。
我将运行的查询的第一部分是:
SELECT userID, fname, lname FROM names WHERE
但其余的,我需要帮助。
修改 使用此查询进行搜索:
SELECT userID, fname, lname FROM names WHERE fname LIKE '%".$term."%' OR lname LIKE '%".$term."%'
如何订购,以便结果按照匹配项开头的结果进行排序,因此当我输入M
时,它会在Mark
答案 0 :(得分:3)
你可以尝试
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
答案 1 :(得分:1)
您应该考虑使用full text搜索名称。全文搜索将允许您考虑匹配中的相似性。
答案 2 :(得分:0)
类似的东西:
where fname like '%' + @searchterm + '%' or lname like '%' + @searchterm + '%'
答案 3 :(得分:0)
您可以在查询语句的末尾执行ORDER BY fname ASC(授予该语法适用于您的DB语句,它看起来像某种SQL,所以应该有类似的东西)。这将按字母顺序对名称进行排序,以便Steve在Steven之前出现(因为错过了'n')。我猜也是如果你想找到基于第一个字母或第一个字母的东西,那么你可能会使用M *,星号将是你的外卡。我希望有所帮助!
答案 4 :(得分:0)
我最近遇到了类似的问题并使用了Similarity function provided by the Microsoft Master Data Services。从那里开始,我实现了一个基于trigram function的单词。我的实施将匹配'Spongebob Squarepants'和'Squarepants,Bob'。
如果您不拥有visual studio(创建sql-server中使用的程序集所需),您还可以使用本机T-SQL实现所需的功能(即模糊字符串匹配)。可以找到一个漂亮的工具包here。
更新: 注意:相似性字符串匹配对增量搜索不起作用,即“M”与“Mark”不匹配。您将不得不使用其他尝试,可能是模糊字符串匹配和分类为'开头','包含'等的组合。