我有用户表(例如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似乎正在自动修剪重复项。