搜索查询中大多数匹配的单词

时间:2013-08-09 07:06:33

标签: mysql database search mysqli full-text-search

我有用户表(例如UserMst)是像

这样的mysql
UserID  FirstName  LastName  FullName (expression column)   
------  ---------  --------  ----------------------------
1       Manish     Patel     Manish Patel
2       Dharmesh   Patel     Dharmesh Patel 
3       Patel      Pranay    Patel  Pranay
4       Patel      Ankita    Patel Ankita

现在我按如下方式获取结果:

Select * from UserMst
where (    FirstName like 'patel dha%'
        OR LastName  like 'patel dha% 
        OR FullName  like '%patel dha% 
        OR FullName  like '%patel% 
        OR FullName  like '%dha% )
Order by ( case when FirstName like 'patel dha%' then 1
                WHEN LastName  like 'patel dha%' then 2 
                WHEN FirstName like '%patel dha' then 3
                WHEN LastName  like '%patel dha%'then 4 end ),
          FullName   

此查询返回结果完美,但我需要更近的有序结果。 在这种情况下如果有人输入关键字'patel dha'(这里用户可以在2个单词之间留出更多空格,他也可以输入更多单词  例如'patel dha'或'patel dha pran') 它的意思是 他正试图寻找/搜索用户1(例如Dharmesh patel) 这个记录应该首先出现。

我的预期结果是:(如果用户输入此关键字:'patel dha'或'patel dha')

UserID  FirstName  LastName  FullName   
------  ---------  --------  --------
2   Dharmesh   Patel     Dharmesh Patel 
4   Patel      Ankita    Patel Ankita
3   Patel      Pranay    Patel  Pranay
1   Manish     Patel     Manish Patel

如果用户以其他方式搜索 我的预期结果是:(如果用户输入此关键字:'patel dha pr'或'patel dha pran')

UserID  FirstName  LastName  FullName   
------  ---------  --------  --------
2   Dharmesh   Patel     Dharmesh Patel 
3   Patel      Pranay    Patel  Pranay
4   Patel      Ankita    Patel Ankita
1   Manish     Patel     Manish Patel

订单已更改。 (因为找到了大多数匹配的单词)

我们可以在这里使用正则表达式吗?或者可能是另一种方法吗?

感谢

1 个答案:

答案 0 :(得分:0)

实际上它就像你说的那样有效,只是在第一个例子中,由于排序顺序A-Z,Manish Patel应排在第2位。

也许我没有完全回答这个问题:)

Here is a SQLFiddle

编辑:顺便说一句,带有2个空格的条目我改为下划线,因为似乎SQLFiddle是自动修剪重复项。