我有用户表(例如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


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

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

谢谢

最佳答案

实际上,它按您所说的那样工作,只是在第一个示例中,Manish Patel由于排序顺序为A-Z,因此应该排名2。

也许我没有完全解决这个问题:)

Here is a SQLFiddle

编辑:顺便说一下,我将2个空格更改为下划线,因为SQLFiddle似乎正在自动修剪重复项。

10-06 10:50