搜索关键字,按空格分开,结果要按精确度从高到低显示,比如:
查找的关键字---> ASP JAVA PHP FLEX
数据库记录集---> ID        CONTENT
 1         JAVA是面对对象的语言
 2         PHP学起来比JAVA要容易点
 3         ASP比PHP用起来简单,PHP比JAVA用起来简单
 4         FLEX做出来的界面好漂亮,而且可以和ASP,PHP,JAVA结合使用
 5         ASP,PHP用来做网页都不错那么搜索的结果排序应该是
 ID      
  4  -->出现了4个关键字
  3  -->出现了3个关键字
  2  -->出现了2个关键字
  5  -->出现了2个关键字 
  1  -->出现了1个关键字 各位CSDN的大佬 帮帮小弟 多谢

解决方案 »

  1.   

    /*
    在库TEST上建立全文索引
    */
    use test
    create table poofly(id int not null, name varchar(10))
    go
    /* 首先创建一个唯一索引,以便全文索引利用*/
    create unique clustered  index un_ky1 on poofly(id)
    /*创建全文目录*/
    create FULLTEXT CATALOG FT1 AS DEFAULT
    /*C创建全文索引*/
    create FULLTEXT INDEX ON poofly(NAME) key index un_ky1 ON  FT1
    /*修改全文目录*/
    alter FULLTEXT CATALOG FT1  REBUILD
    /*删除全文目录FT(含有全文索引时候不能删除)*/
    drop fulltext catalog ft
    /*查看数据库所有的全文目录*/
    select* from sys.fulltext_catalogs
    /*
    fulltext_catalog_id name                                                                                                                             path                                                                                                                                                                                                                                                             is_default is_accent_sensitivity_on data_space_id file_id     principal_id is_importing
    ------------------- -------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------- ------------------------ ------------- ----------- ------------ ------------
    5                   test                                                                                                                             NULL                                                                                                                                                                                                                                                             0          1                        NULL          NULL        1            0
    11                  FT1                                                                                                                              NULL                                                                                                                                                                                                                                                             1          1                        NULL          NULL        1            0
    */
    /* 查看所有用到全文索引的表*/
    exec sp_help_fulltext_tables
    /*
    TABLE_OWNER                                                                                                                      TABLE_NAME                                                                                                                       FULLTEXT_KEY_INDEX_NAME                                                                                                          FULLTEXT_KEY_COLID FULLTEXT_INDEX_ACTIVE FULLTEXT_CATALOG_NAME
    -------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- ------------------ --------------------- --------------------------------------------------------------------------------------------------------------------------------
    dbo                                                                                                                              poofly                                                                                                                           un_ky1                                                                                                                           1                  1                     FT1
    */
    /*
    在库TEST上建立全文索引
    */
    use test
    create table poofly(id int not null, name varchar(10))
    go
    /* 首先创建一个唯一索引,以便全文索引利用*/
    create unique clustered  index un_ky1 on poofly(id)
    /*创建全文目录*/
    create FULLTEXT CATALOG FT1 AS DEFAULT
    /*C创建全文索引*/
    create FULLTEXT INDEX ON poofly(NAME) key index un_ky1 ON  FT1
    /*修改全文目录*/
    alter FULLTEXT CATALOG FT1  REBUILD
    /*删除全文目录FT(含有全文索引时候不能删除)*/
    drop fulltext catalog ft
    ---------------------------------------------------
    --使用contains关键字进行全文索引--1.前缀搜索
    select name from tb where contains(name,'"china*"')
    /*--注意这里的* 返回结果会是 chinax chinay chinaname china  
    --返回前缀是china的name 
    --如果不用“”隔开 那么系统会都城 contains(name,'china*') 与china* 匹配*/--2.使用派生词搜索
    select name from tb where contains(name,'formsof(inflectional,"foot")')
    /* 出来结果可能是 foot feet (所有动词不同形态 名词单复数形式)*/--3.词加权搜索
    select value from tb where contains(value , 'ISABOUT(performance weight(.8))')
    /*全值用0-1的一个数字表示 表示每个词的重要程度*/--4.临近词搜素
    select * from tb where contains(document,'a near b')
    /* 出来的结果是“a”单词与“b”单词临近的document 
    可以写成 contains(document,'a ~ b')
    */
    --5.布尔逻辑搜素
    select * from tb where contains(name,'"a" and "b"')
    /*返回既包含A 又包含 B单词的行 
    当然 这里的AND 关键字还有换成 OR ,AND NOT 等
    */
    --------------------------------------------------
    --你还可以使用RREETEXT 进行模糊搜索
    --任意输入文本 全文索引自动识别重要单词 然后构造一个查询
    use test 
    go
    select * from tb where freetext(wendang,'zhubajie chi xi gua !')
    --============================================================
    --对全文索引性能影响因素很多 包括硬件资源方面 还有SQL 自身性能 和MSFTESQL服务的效率等方面
    --它的搜索性能有2方面 : 全文索引性能 和 全文查询性能
    感觉下 贴
      

  2.   

    soundex和difference函数对付不了 学习一下先
      

  3.   

    -------------------------------------
    --  Author : liangCK 梁爱兰
    --  Comment: 小梁 爱 兰儿
    --  Date   : 2009-09-14 09:59:07
    -------------------------------------
     
    --> 生成测试数据: @tb
    DECLARE @tb TABLE (ID INT,CONTENT VARCHAR(100))
    INSERT INTO @tb
    SELECT 1,'JAVA是面对对象的语言' UNION ALL
    SELECT 2,'PHP学起来比JAVA要容易点' UNION ALL
    SELECT 3,'ASP比PHP用起来简单,PHP比JAVA用起来简单' UNION ALL
    SELECT 4,'FLEX做出来的界面好漂亮,而且可以和ASP,PHP,JAVA结合使用' UNION ALL
    SELECT 5,'ASP,PHP用来做网页都不错'--SQL查询如下:DECLARE @str varchar(100);
    SET @str = 'ASP JAVA PHP FLEX';SELECT * FROM @tb AS A
    ORDER BY 
       (SELECT COUNT(*)
        FROM (
            SELECT B.x.value('.','varchar(50)') AS s
            FROM (SELECT CONVERT(xml,'<v>'+REPLACE(@str,' ','</v><v>')+'</v>') AS s) AS T
               CROSS APPLY T.s.nodes('//v') AS B(x)) AS T
        WHERE CHARINDEX(s,A.CONTENT) > 0) DESC/*
    ID          CONTENT
    ----------- ---------------------------
    4           FLEX做出来的界面好漂亮,而且可以和ASP,PHP,JAVA结合使用
    3           ASP比PHP用起来简单,PHP比JAVA用起来简单
    5           ASP,PHP用来做网页都不错
    2           PHP学起来比JAVA要容易点
    1           JAVA是面对对象的语言(5 行受影响)
    */
      

  4.   

    -------------------------------------
    --  Author : liangCK 梁爱兰
    --  Comment: 小梁 爱 兰儿
    --  Date   : 2009-09-14 09:59:07
    -------------------------------------
     
    --> 生成测试数据: @tb
    DECLARE @tb TABLE (ID INT,CONTENT VARCHAR(100))
    INSERT INTO @tb
    SELECT 1,'JAVA是面对对象的语言' UNION ALL
    SELECT 2,'PHP学起来比JAVA要容易点' UNION ALL
    SELECT 3,'ASP比PHP用起来简单,PHP比JAVA用起来简单' UNION ALL
    SELECT 4,'FLEX做出来的界面好漂亮,而且可以和ASP,PHP,JAVA结合使用' UNION ALL
    SELECT 5,'ASP,PHP用来做网页都不错'--SQL查询如下:DECLARE @str varchar(100);
    SET @str = 'ASP JAVA PHP FLEX';SELECT * FROM @tb AS A
    ORDER BY 
       (SELECT COUNT(*)
        FROM (SELECT SUBSTRING(@str,number,CHARINDEX(' ',@str+' ',number)-number) AS s
              FROM master.dbo.spt_values
              WHERE type = 'p' AND SUBSTRING(' '+@str,number,1) = ' '
                  AND number <= LEN(@str)) AS T
        WHERE CHARINDEX(s,A.CONTENT) > 0) DESC/*
    ID          CONTENT
    ----------- ------------------------
    4           FLEX做出来的界面好漂亮,而且可以和ASP,PHP,JAVA结合使用
    3           ASP比PHP用起来简单,PHP比JAVA用起来简单
    5           ASP,PHP用来做网页都不错
    2           PHP学起来比JAVA要容易点
    1           JAVA是面对对象的语言(5 行受影响)
    */
      

  5.   


    /*---------------------------------
    --  Author : htl258(Tony)
    --  Date   : 2009-09-14 09:59:47
    --  Version: Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86) 
    Mar 29 2009 10:27:29 
    Copyright (c) 1988-2008 Microsoft Corporation
    Enterprise Evaluation Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)---------------------------------*/
    --> 生成测试数据表:tbIF NOT OBJECT_ID('[tb]') IS NULL
    DROP TABLE [tb]
    GO
    CREATE TABLE [tb]([ID] INT,[CONTENT] NVARCHAR(40))
    INSERT [tb]
    SELECT 1,N'JAVA是面对对象的语言' UNION ALL
    SELECT 2,N'PHP学起来比JAVA要容易点' UNION ALL
    SELECT 3,N'ASP比PHP用起来简单,PHP比JAVA用起来简单' UNION ALL
    SELECT 4,N'FLEX做出来的界面好漂亮,而且可以和ASP,PHP,JAVA结合使用' UNION ALL
    SELECT 5,N'ASP,PHP用来做网页都不错'
    GO
    --SELECT * FROM [tb]--创建对照表数据
    IF NOT OBJECT_ID('[关键字对照表]') IS NULL
    DROP TABLE [关键字对照表]
    GO
    CREATE TABLE [关键字对照表]([ID] INT IDENTITY,[name] NVARCHAR(40))
    INSERT [关键字对照表]
    SELECT 'JAVA' UNION ALL
    SELECT 'PHP' UNION ALL
    SELECT 'ASP' UNION ALL
    SELECT 'FLEX' 
    GO
    -->SQL查询如下:
    --创建获取关键字数量的自字义函数:
    IF NOT OBJECT_ID('[fn_px]') IS NULL
    DROP FUNCTION [fn_px]
    GO
    CREATE FUNCTION fn_px(@str NVARCHAR(100))
    RETURNS INT
    AS
    BEGIN
    RETURN(SELECT SUM(CASE WHEN CHARINDEX(NAME,@str)>0 THEN 1 ELSE 0 END) FROM [关键字对照表])
    END
    GO
    --调用函数查询如下:
    SELECT * FROM tb ORDER BY dbo.fn_px([CONTENT]) desc
    --结果:
    /*
    ID          CONTENT
    ----------- ----------------------------------------
    4           FLEX做出来的界面好漂亮,而且可以和ASP,PHP,JAVA结合使用
    3           ASP比PHP用起来简单,PHP比JAVA用起来简单
    5           ASP,PHP用来做网页都不错
    2           PHP学起来比JAVA要容易点
    1           JAVA是面对对象的语言(5 行受影响)
    */
      

  6.   


    create table #(id int,content varchar(2000))
    insert # values(1,'JAVA是面对对象的语言')
    insert # values(2,'PHP学起来比JAVA要容易点')
    insert # values(3,'ASP比PHP用起来简单,PHP比JAVA用起来简单')
    insert # values(4,'FLEX做出来的界面好漂亮,而且可以和ASP,PHP,JAVA结合使用')
    insert # values(5,'ASP,PHP用来做网页都不错')
    declare @findStr varchar(100)
    declare @str varchar(100)
    set @findStr='ASP JAVA PHP FLEX'
    set @findStr=@findStr+' '
    select *,cnt=0 into #2 from #
    declare @pos1 int
    declare @pos2 int
    set @pos1=1
    set @pos2=charindex(' ',@findStr,@pos1)
    while @pos2>0
    begin
    set @str=substring(@findstr,@pos1,@pos2-@pos1)
    update #2 set cnt=cnt+1 where charindex(@str,content)>0
    set @pos1=@pos2+1
    set @pos2=charindex(' ',@findStr,@pos1)
    end
    select * from #2 order by cnt desc
    drop table #2,#
      

  7.   

    --關鍵字數量倒序,再ID順序排列
    /*---------------------------------
    --  Author : htl258(Tony)
    --  Date   : 2009-09-14 09:59:47
    --  Version: Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86) 
    Mar 29 2009 10:27:29 
    Copyright (c) 1988-2008 Microsoft Corporation
    Enterprise Evaluation Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)---------------------------------*/
    --> 生成测试数据表:tbIF NOT OBJECT_ID('[tb]') IS NULL
    DROP TABLE [tb]
    GO
    CREATE TABLE [tb]([ID] INT,[CONTENT] NVARCHAR(40))
    INSERT [tb]
    SELECT 1,N'JAVA是面对对象的语言' UNION ALL
    SELECT 2,N'PHP学起来比JAVA要容易点' UNION ALL
    SELECT 3,N'ASP比PHP用起来简单,PHP比JAVA用起来简单' UNION ALL
    SELECT 4,N'FLEX做出来的界面好漂亮,而且可以和ASP,PHP,JAVA结合使用' UNION ALL
    SELECT 5,N'ASP,PHP用来做网页都不错'
    GO
    --SELECT * FROM [tb]--创建对照表数据
    IF NOT OBJECT_ID('[关键字对照表]') IS NULL
    DROP TABLE [关键字对照表]
    GO
    CREATE TABLE [关键字对照表]([ID] INT IDENTITY,[name] NVARCHAR(40))
    INSERT [关键字对照表]
    SELECT 'JAVA' UNION ALL
    SELECT 'PHP' UNION ALL
    SELECT 'ASP' UNION ALL
    SELECT 'FLEX' 
    GO
    -->SQL查询如下:
    --创建获取关键字数量的自字义函数:
    IF NOT OBJECT_ID('[fn_px]') IS NULL
    DROP FUNCTION [fn_px]
    GO
    CREATE FUNCTION fn_px(@str NVARCHAR(100))
    RETURNS INT
    AS
    BEGIN
    RETURN(SELECT SUM(CASE WHEN CHARINDEX(NAME,@str)>0 THEN 1 ELSE 0 END) FROM [关键字对照表])
    END
    GO
    --调用函数查询如下:
    SELECT * FROM tb ORDER BY dbo.fn_px([CONTENT]) DESC,ID 
    --结果:
    /*
    ID          CONTENT
    ----------- ----------------------------------------
    4           FLEX做出来的界面好漂亮,而且可以和ASP,PHP,JAVA结合使用
    3           ASP比PHP用起来简单,PHP比JAVA用起来简单
    2           PHP学起来比JAVA要容易点
    5           ASP,PHP用来做网页都不错
    1           JAVA是面对对象的语言(5 行受影响)
    */
      

  8.   

    -------------------------------------
    --  Author : liangCK 梁爱兰
    --  Comment: 小梁 爱 兰儿
    --  Date   : 2009-09-14 09:59:07
    -------------------------------------
     
    --> 生成测试数据: @tb
    DECLARE @tb TABLE (ID INT,CONTENT VARCHAR(100))
    INSERT INTO @tb
    SELECT 1,'JAVA是面对对象的语言' UNION ALL
    SELECT 2,'PHP学起来比JAVA要容易点' UNION ALL
    SELECT 3,'ASP比PHP用起来简单,PHP比JAVA用起来简单' UNION ALL
    SELECT 4,'FLEX做出来的界面好漂亮,而且可以和ASP,PHP,JAVA结合使用' UNION ALL
    SELECT 5,'ASP,PHP用来做网页都不错' UNION ALL
    SELECT 6,'liangck'--SQL查询如下:DECLARE @str varchar(100);
    SET @str = 'ASP JAVA PHP FLEX';--将关键字转成行集表SELECT SUBSTRING(@str,number,CHARINDEX(' ',@str+' ',number)-number) AS s
    INTO #tmp
    FROM master.dbo.spt_values
    WHERE type = 'p' AND SUBSTRING(' '+@str,number,1) = ' '
        AND number <= LEN(@str)--查找,排序
    SELECT * FROM @tb AS A
    WHERE EXISTS(SELECT * FROM #tmp 
                 WHERE CHARINDEX(s,A.CONTENT) > 0)
    ORDER BY 
       (SELECT COUNT(*)
        FROM #tmp
        WHERE CHARINDEX(s,A.CONTENT) > 0) DESC,
        ID;  --如果关键字出现次数一样,按ID从小到大排序.--删除临时表
    DROP TABLE #tmp;/*
    ID          CONTENT
    ----------- -----------------------
    4           FLEX做出来的界面好漂亮,而且可以和ASP,PHP,JAVA结合使用
    3           ASP比PHP用起来简单,PHP比JAVA用起来简单
    5           ASP,PHP用来做网页都不错
    2           PHP学起来比JAVA要容易点
    1           JAVA是面对对象的语言(5 行受影响)*/
      

  9.   

    WHERE type = 'p' AND SUBSTRING(' '+@str,number,1) = ' '
        AND number <= LEN(@str)----->WHERE type = 'p' AND SUBSTRING(' '+@str,number,1) = ' '
        AND number BETWEEN 1 AND LEN(@str)改成这样..不然处理空格上.有些不对.
      

  10.   

    我用的是ACCESS的数据库,好象不行,不过还是非常感谢!
      

  11.   

    9楼。 八楼。。
    你们有试过吧查询关键字换成‘123’,'hahah'这些不相关的关键字么??
    我有。我告诉你。一样也是全都查出来