假设某人输入此搜索(在表单上):
Nicole Kidman films
我可以使用哪种SQL来查找“最佳”结果?
我想这样的事情:
SELECT * FROM myTable WHERE ( Field='%Nicole Kidman Films%' OR Field='%Nicole%' OR Field='%Kidman%' OR Field='%Films%' )
我的问题是如何获得最相关的结果? 非常感谢你!
答案 0 :(得分:2)
您正在寻找的内容通常称为“全文搜索”或“自然语言搜索”。不幸的是,它不是标准的SQL。这是一个关于如何在mysql中执行此操作的教程:http://devzone.zend.com/article/1304
您应该能够找到其他数据库引擎的示例。
答案 1 :(得分:2)
SELECT * FROM myTable WHERE MATCH(Field) AGAINST('Nicole Kidman Films')
此查询将按相关性的顺序返回行,如全文搜索算法所定义。
注意:这是针对MySQL的,其他DBMS具有类似的功能。
答案 2 :(得分:0)
在SQL中,等号不支持其中的通配符 - 您的查询应该是:
SELECT *
FROM myTable
WHERE Field LIKE '%Nicole Kidman Films%'
OR Field LIKE '%Nicole%'
OR Field LIKE '%Kidman%'
OR Field LIKE '%Films%'
但是如果存在索引,那么左侧的通配符将不会使用索引。
更好的方法是使用全文搜索,大多数数据库本身提供,但有像Sphinx这样的第三方供应商。每个人都有自己的算法,根据搜索的标准分配排名/分数,以显示算法认为最相关的内容。