我有用户表(例如UserMst)是像
这样的mysqlUserID 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
订单已更改。 (因为找到了大多数匹配的单词)
我们可以在这里使用正则表达式吗?或者可能是另一种方法吗?
感谢
答案 0 :(得分:0)
实际上它就像你说的那样有效,只是在第一个例子中,由于排序顺序A-Z,Manish Patel应排在第2位。
也许我没有完全回答这个问题:)
编辑:顺便说一句,带有2个空格的条目我改为下划线,因为似乎SQLFiddle是自动修剪重复项。