代码之家  ›  专栏  ›  技术社区  ›  Garry

生成排序的SQL结果的首选方法?

  •  2
  • Garry  · 技术社区  · 15 年前

    我需要建立一些搜索逻辑来产生排名结果。一个简单的例子是查询具有firstname、lastname和zip代码列的表。所需的输出将是按“匹配度”的顺序匹配的列表A行。

    也就是说,最上面的结果将是在所有三列上匹配的结果,然后是那些只在两列上匹配的结果,最后是单列匹配的结果。

    对于多个查询和组合结果,是否有公认的say全文索引偏好?有什么我绝对不该做的吗?

    我很感激这一切都是相当模糊的,并且与SO问题的具体性质有些不一致,但是我正在寻找关于采取的方法的指导,而不是“做我的家庭作业”类型的问题:—)

    (平台为SQL Server 2005)

    2 回复  |  直到 15 年前
        1
  •  0
  •   Espo    15 年前

    下面是一个与您的问题相匹配的快速SQL解决方案。创建此函数后,可以
    ORDER BY dbo.func_getWeightByColumn(@firstname, firstname, @lastname, 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;
    
        2
  •  1
  •   marc_s Anurag    15 年前

    全文索引肯定会给你这个-你可以用 CONTAINSTABLE FREETEXTTABLE 并获得可能匹配的列表,包括它们的等级/相关性。

    在SimpleTalk上查看有关SQL Server全文搜索的优秀介绍文章:

    作为一个好的起点。

    马克