0
我有一個前端的搜索框,用戶可以搜索某人的名字,中間名,姓或職稱和散裝的後端代碼是這樣的:TSQL搜索框名字姓氏順序優先級
SELECT TOP 50 * FROM (SELECT [EmployeeId], SUM(MatchOrder) as MatchOrder
FROM (SELECT
[EmployeeId],
CASE WHEN A.[EmployeeFieldId] = 4 Then 15 --Surname
WHEN A.[EmployeeFieldId] in (1, 2) Then 15 --PreferredName, FirstName
WHEN A.[EmployeeFieldId] = 3 Then 5 --MiddleName
WHEN A.[EmployeeFieldId] = 5 Then 20 --JobTitle
ELSE 3
END as MatchOrder
FROM [latest].[EmployeeAttributes] A
WHERE (' + @search + ')
) internal
GROUP BY EmployeeId) A
join dbo.vwEmployees E on E.EmployeeId = A.EmployeeId -- TEMP
ORDER BY 2 DESC'
每個employeeID都會得到一個分數(MatchOrder),這個分數取決於滿足上述多少條件(例如First Name + Surname match = 30),然後根據MatchOrder分數排序以顯示在前端,但問題是,如果某人的姓和名是非常相似的,例如帕特里克帕特森和我只搜索帕特賴斯,帕特里克帕特森(30分)出現在帕特里克賴斯(30分)以上,因爲名字匹配兩次。
我想它要麼降低分的成績如果比賽是雙發,或修改我的switch語句以某種方式做到這一點(巢式病例?
你知道我怎麼能解決這個問題?任何幫助將不勝感激。
感謝
嘿@duney - 爲你做了這項工作嗎?讓我知道,如果它沒有給你你想要的和關於需求的更多細節,我可以提供幫助。 – 2014-09-11 20:09:47