我有一个是URL的分类表;如:
序号        一级分类   二级分类   URL
1          技术网站    论坛    http://bbs.csdn.net/
2          技术网站    论坛    http://www.csdn.net/然后还有用户访问的基础数据表。
用户ID  访问的URL
1      http://bbs.csdn.net/topics/new?forum_id=MSSQL_Basic计算出匹配到URL库的第一条,如果第一条没有匹配到,默认匹配到一级域名的数据,第二条。
如上所示匹配第一条;数据匹配算法

解决方案 »

  1.   

    一定要用sql?貌似用正则表达式会好一点
      

  2.   

    IF OBJECT_ID('dbo.g_drl') IS NOT NULL DROP TABLE g_drl
    GO 
    CREATE TABLE g_drl(
      id int null,
      yjfl varchar(50) null,
      rjfl varchar(50) null,
      DRL  varchar(50) null
    )
    GO
    INSERT g_drl
    SELECT 1,'技术网站','论坛','http://bbs.csdn.net/' UNION ALL
    SELECT 2,'技术网站','论坛','http://www.csdn.net/' UNION ALL
    SELECT 3,'网站','论坛','http://www.baidu.com/'
    GO
    IF OBJECT_ID('dbo.g_user') IS NOT NULL DROP TABLE g_user
    GO 
    CREATE TABLE g_user(
      id int null,
      DRL  varchar(100) null
    )
    GO
    INSERT g_user
    SELECT 1,'http://bbs.csdn.net/topics/new?forum_id=MSSQL_Basic' UNION ALL
    SELECT 2,'http://www.baidu.com/index.php?tn=myie2dg&ch=6'select * from g_drl
    select * from g_userselect b.id,a.drl from g_drl a,g_user b where b.drl like '%'+a.drl+'%'
      

  3.   

    基础数据表.访问的URL like 分类表.URL+'%'不太清楚 分类表.URL+'%' 这个写法是否正确
    但这样应该就没有问题了
    left(基础数据表.访问的URL,length(分类表.URL)) = 分类表.URL
      

  4.   

    计算出匹配到URL库的第一条,如果第一条没有匹配到,默认匹配到一级域名的数据,第二条。规则再说明确点才能写
      

  5.   

    将地址分字段存放
    http://bbs.csdn.net一、字段
    1、红色部分bbs,字段url_detail
    2、蓝色部分csdn.net,字段url_basic二、扫描url_detail
    if recordcount<>0 then
    输出 url_datail
    else
    输出 url_basic
    end if三、拓展
    如果这个url表的维护仅由管理员,可以考虑用FSO生成一个页面,用于判断,避免反复读取数据库。
      

  6.   

    做两个函数,一个用来从访问url提取出网站url,另一个从网站url提取主域名url。
      

  7.   

    这样吗?
    IF OBJECT_ID('dbo.g_drl') IS NOT NULL DROP TABLE g_drl
    GO 
    CREATE TABLE g_drl(
      id int null,
      yjfl varchar(50) null,
      rjfl varchar(50) null,
      DRL  varchar(50) null
    )
    GO
    INSERT g_drl
    SELECT 1,'技术网站','论坛','http://bbs.csdn.net/' UNION ALL
    SELECT 2,'技术网站','论坛','http://www.csdn.net/' UNION ALL
    SELECT 3,'网站','论坛','http://www.baidu.com/'
    GO
    IF OBJECT_ID('dbo.g_user') IS NOT NULL DROP TABLE g_user
    GO 
    CREATE TABLE g_user(
      id int null,
      DRL  varchar(100) null
    )
    GOINSERT g_user
    SELECT 1,'http://bbs.csdn.net/topics/new?forum_id=MSSQL_Basic' UNION ALL
    SELECT 2,'http://www.baidu.com/index.php?tn=myie2dg&ch=6'
    select C.DRl,A.DRL,B.id,B.DRL from g_drl A
    inner join g_drl B on CHARINDEX(REPLACE(A.DRL,'http://www.',''),B.DRL)>1
    inner join g_user C on CHARINDEX(REPLACE(A.DRL,'http://www.',''),C.DRL)>0
    /*
    DRl                                                                                                  DRL                                                id          DRL
    ---------------------------------------------------------------------------------------------------- -------------------------------------------------- ----------- --------------------------------------------------
    http://bbs.csdn.net/topics/new?forum_id=MSSQL_Basic                                                  http://www.csdn.net/                               1           http://bbs.csdn.net/
    http://bbs.csdn.net/topics/new?forum_id=MSSQL_Basic                                                  http://www.csdn.net/                               2           http://www.csdn.net/
    http://www.baidu.com/index.php?tn=myie2dg&ch=6                                                       http://www.baidu.com/                              3           http://www.baidu.com/(3 行受影响)*/
    drop table g_drl
    drop table g_user
      

  8.   

    sql 中也可以嵌套进正则表达式的函数。例如使用C#实现的
      

  9.   

    肯定是分段啦
    把域名分成两个参数 bbs 和 csdn
     like("%csdn%") 
     like("%bbs.csdn%")
      

  10.   

    1、拆字段,把用户访问的URL拆开,这样去匹配,更好点。
    2、在url表中创建父子关系,这样,管理应该没有问题。
      

  11.   

    基础数据表.访问的URL like 分类表.URL+'%'
      

  12.   

    #include<stdio.h>void main()
    {
    int n,m;
    m = 1; n = m+++m++;
        
    printf("%d",n);
    }
      

  13.   

    #include<stdio.h>void main()
    {
    int n,m;
    m = 1; n = m+++m++;
        
    printf("%d",n);
    }