生成排序SQL结果的首选方法?
我需要建立一些搜索逻辑来生成排名结果。一个简单的例子是查询具有firstname、lastname和zip code列的表。所需的输出将是一个列表,其中列出了匹配的行,按匹配的“程度”排序 也就是说,最重要的结果是在所有三列上匹配的结果,然后是仅在两列上匹配的结果,然后是单列匹配的结果 与多个查询和合并结果相比,是否存在公认的全文索引偏好?有什么我绝对不应该做的吗 我理解这一切都相当模糊,与SO问题的具体性质略有出入,但我正在寻找关于采取的方法的指导,而不是“做我的家庭作业”类型的问题:-)生成排序SQL结果的首选方法?,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我需要建立一些搜索逻辑来生成排名结果。一个简单的例子是查询具有firstname、lastname和zip code列的表。所需的输出将是一个列表,其中列出了匹配的行,按匹配的“程度”排序 也就是说,最重要的结果是在所有三列上匹配的结果,然后是仅在两列上匹配的结果,然后是单列匹配的结果 与多个查询和合并结果相比,是否存在公认的全文索引偏好?有什么我绝对不应该做的吗 我理解这一切都相当模糊,与SO问题的具体性质略有出入,但我正在寻找关于采取的方法的指导,而不是“做我的家庭作业”类型的问题:-) (
(平台是SQL Server 2005)全文索引肯定会给你这个-你可以使用
CONTAINSTABLE
或FREETEXTTABLE
查询FTS(全文服务器),并获得可能匹配的列表,包括它们的排名/相关性
在Simple Talk上查看SQL Server全文搜索的优秀介绍文章:
Marc这里有一个与您的问题相匹配的快速sql解决方案。创建此函数后,您可以
ORDER BY dbo.func_getWeightByColumn(@firstname,firstname,lastname,@zipcode,zipcode)DESC
CREATE FUNCTION [dbo].[func_getWeightByColumn]
(
@p1a varchar(50),
@p1b varchar(50),
@p2a varchar(50) = 'a',
@p2b varchar(50) = 'b',
@p3a varchar(50) = 'a',
@p3b varchar(50) = 'b',
)
RETURNS int
AS
BEGIN
DECLARE @Result int
SET @Result = 0
IF @p1a = @p1b
BEGIN
SET @Result = @Result + 1
END
IF @p2a = @p2b
BEGIN
SET @Result = @Result + 1
END
IF @p3a = @p3b
BEGIN
SET @Result = @Result + 1
END
RETURN @Result
END;
很好,谢谢你的链接。我以前读过第一篇,但没有读第二篇。。我现在就开始读吧!现在这是一个我甚至没有考虑过的方法!谢谢