这已经在SQL Server上测试过,但是如果它不能马上工作,应该给你一个关于MySQL的想法;
测试数据
IF OBJECT_ID('tempdb..#TestData') IS NOT NULL DROP TABLE #TestData
GO
CREATE TABLE #TestData (FirstName varchar(20), LastName varchar(20), City varchar(20), State varchar(20))
INSERT INTO #TestData (FirstName, LastName, City, State)
VALUES
('Jon','Snow','Winterfell','Westeros')
,('Jaime','Lannister','Riverrun','Westeros')
,('Margaery','Tyrell','Kings Landing','Westeros')
,('Cersei','Lannister','Kings Landing','Westeros')
,('Daenerys','Targaryen','Mereen','Essos')
,('Davos','Seaworth','Winterfell','Westeros')
,('Theon','Greyjoy','Mereen','Essos')
,('Tyrion','Lannister','Mereen','Essos')
,('Petyr','Baelish','Winterfell','Westeros')
查询与设置为变量的搜索条件。 case
将检查我们有多少匹配以及该字段的order
。
DECLARE @Variable1 varchar(20); SET @Variable1 = 'Jon'
DECLARE @Variable2 varchar(20); SET @Variable2 = 'Snow'
DECLARE @Variable3 varchar(20); SET @Variable3 = 'Winterfell'
DECLARE @Variable4 varchar(20); SET @Variable4 = 'Westeros'
SELECT
FirstName
,LastName
,City
,State
,CASE WHEN FirstName = @Variable1 THEN 1 ELSE 0 END +
CASE WHEN LastName = @Variable2 THEN 1 ELSE 0 END +
CASE WHEN City = @Variable3 THEN 1 ELSE 0 END +
CASE WHEN State = @Variable4 THEN 1 ELSE 0 END Matches
FROM #TestData
ORDER BY (
CASE WHEN FirstName = @Variable1 THEN 1 ELSE 0 END +
CASE WHEN LastName = @Variable2 THEN 1 ELSE 0 END +
CASE WHEN City = @Variable3 THEN 1 ELSE 0 END +
CASE WHEN State = @Variable4 THEN 1 ELSE 0 END
) DESC
其中给出结果为;
FirstName LastName City State Matches
Jon Snow Winterfell Westeros 4
Davos Seaworth Winterfell Westeros 2
Petyr Baelish Winterfell Westeros 2
Jaime Lannister Riverrun Westeros 1
Margaery Tyrell Kings Landing Westeros 1
Cersei Lannister Kings Landing Westeros 1
Daenerys Targaryen Mereen Essos 0
Theon Greyjoy Mereen Essos 0
Tyrion Lannister Mereen Essos 0
不要用语言描述你的结构,*视觉*向我们展示的表结构。还请提供一些示例数据,您尝试过的查询以及您的预期结果。 – Siyual
换句话说,您想要将搜索结果与排名一起呈现给最终用户。如果是这种情况,我建议使用索引框架,而不是直接在SQL中执行此操作。 –