设为首页
加入收藏
帮助中心
首页 | 红盾通告 | 信息中心 | ASP技术 | 数据库 | 网页设计 | 网管专栏 | OICQ攻略 | 墨客频道 | 网站运营 |
当前位置:首页 >> ASP技术 >> ASP技巧 >> 正文
最新信息
·ASP防止采集的代码
·文字防复制乱码
·关于ASP中的UTF8编码
·ASP精典之常用函数收集
·用正则式除去HTML标记
·ASP国际化多语言详细方案
·改进 ASP 的字符串处理性能
·ASP缓存技术
·巧用ASP技术保护DHTML源代…
·ASP读取系统时区的错误行为…
资料搜索
热点信息
·删除数组中的重复元素
·ASP中转换unicode码为GB码…
·asp得到当前页地址
·关于ASP中的UTF8编码
·判断上一页的来源
·Asp中有关字符编码转换的几…
·用正则式除去HTML标记
·ASP 三十二条精华代码
·动检测上传文件是否含有非…
·常用过滤函数
推荐信息
·ASP 三十二条精华代码
·ASP中转换unicode码为GB码…
·如何拒绝同一张表单被多次…
·常用过滤函数
·常用asp代码
·Asp中有关字符编码转换的几…
·获得上一个月几月
·计算文件下载时间
·三条语句搞定路径
·判断上一页的来源


Google
 
实现支持逻辑搜索/单词搜索/词组搜索+支持OR/AND关键
〖编辑:Cloudy | 浏览:人次〗

CLASS功能.替换传入的字符串成为SQL语句Where关键字后面的表达式:

词语搜索 [例如: 小明]
 
词组搜索
词组里面每一个词都将被检索
例如: 小强1 小名1 小强强 小小强
 
逻辑搜索
支持 And 和 Or 运算符.
例如: 小明 And 小强 And 小小强

复合条件:
例如:(小小明 Or 小明) And (小强 Or 小小强)
例如:(小小明 Or 小名) And 小小强
例如: ROOT1 And (广东人 Or 北京人)

 

-----------------------------------------------------------
Class CreateQueryString

    Public objReg
    Public intStart
    Public strField
    Private objNode2
    Private strText

    Public Property Let QueryString( strValue )
        strText = Lcase( strValue )
    End Property
   
    Private Sub Class_Initialize()
        Set objReg = new RegExp
        strField = "(标题+文章)"
    End Sub
   
    Private Sub Class_Terminate()
        Set objReg = Nothing
    End Sub

    Public Default Function GetText()
        Dim blnRes
        Dim strSky
        With objReg
            .IgnoreCase = true
            .Global     = True
            .Pattern    = "s"
            blnRes = .Test( strText )
        End With
        If (Not blnRes) Then
            intStart = 2
            GetText  = strField & " like '%" & strText & "%'"
        Else
            objReg.Pattern = "sand|sor"
            blnRes = objReg.Test( strText )
            If blnRes Then
                strSky = check()
                If strSky = False Then
                    GetText = wahaha()
                Else
                    GetText = strSky
                End if
            Else
                GetText = wahaha()
            End if
        End If
    End Function
   
    Private Function wahaha()
        Dim strTer
        Dim strLikes
        Dim strOrs
        Dim strI
        Dim objRe
        strTer   = ""
        strLikes = " or (" & strField & " like '%"
        strOrs   = "%')"
        objReg.Pattern = "(S*S)"
        Set objRe = objReg.Execute(strText)
        For Each strI In objRe
            strTer  = strTer & strLikes & strI & strOrs
        Next
        wahaha = Mid( strTer , 4 )
        intStart = 3
    End Function

    Private Function CheckYes( strMode , intCount)
        Dim objNode1
        objReg.Pattern = strMode
        Set objNode1 = objReg.Execute( strText )
        If objNode1.Count < 1 Then
            CheckYes = True
        Else
            Set objNode2 = objNode1( 0 )
            If objNode2.subMatches.Count < intCount Then
                CheckYes = True
            End If
        End If
    End Function
   
    Private Function ORAND()
        Dim strSSS
        Dim strCCC
        Dim strAAA
        Dim a143
        Dim i
        Dim objN
        Dim blnTru
        Dim blnBBB
        strSSS = "(" & strField & " like '%"
        strCCC = "%')"
        strAAA = ""
        n1     = 0
        blnTru = True
        blnBBB = True
       
        objReg.Pattern = "(S*S)"
        Set objN = objReg.Execute( strText )
        a143 = objN.Count - 1
        If (objN.Item( a143 ) = "and") Or (objN.Item( a143 ) = "or") Then
            ORAND = False
            Exit Function
        End if
        For Each i In objN
            If blnTru Then
                If (i <> "and") And (i <> "or") Then
                    blnTru    = False
                    strAAA = strAAA & strSSS & i & strCCC
                Else
                    blnBBB = false
                    Exit for
                End if
            Else
                If (i = "and") Or (i = "or") Then
                    blnTru    = True
                    strAAA = strAAA & i
                Else
                    blnBBB = False
                    Exit For
                End if
            End if
        Next
        If (Not blnBBB) Then
            ORAND = False
        Else
            ORAND = strAAA
            intStart = 4
        End if
    End Function
   
   
   
    Private Function check()
        Dim re
        Dim re1
        Dim re2
        Dim re3
        Dim str
        Dim str1
        Dim a1
        Dim a2
        Dim a3
        Dim a4
        str  = strField & " like '%"
        str1 = "%'"
        With objReg
            .Pattern = "^(.+)s(and|or)s"
            re       = .Test( strText )
            .Pattern = "s(and|or)s(.+)$"
            re3      = .Test( strText )
        End With
        If re And re3 Then
            If CheckYes( "^((S*S) (borb|bandb) (S*S)) (and|or) ((S*S) (borb|bandb) (S*S))$" , 6 ) Then
                check = False
            Else
                With objNode2
                    a1    = .submatches(0)
                    a2    = .submatches(2)
                    a3    = .submatches(4)
                    a4    = .submatches(6)
                    check = "(" & str & a1 & str1 & " " & .submatches(1) & " " & str & a2 & str1 & ") " &_
                            .submatches(3) & " (" & str & a3 & str1 & " " & .submatches(5) & " " & str & a4 & str1 & ")"
                    intStart = 5
                End With
            End If
        ElseIf re Then
            If CheckYes( "^((S*S) (borb|bandb) (S*S)) (and|or) (.+)" , 4 ) Then
                check = False
            Else
                With objNode2
                    a1    = .submatches(0)
                    a2    = .submatches(2)
                    a3    = .submatches(4)
                    check = "(" & str & a1 & str1 & " " & .submatches(1) & " " & str & a2 & str1 & ") " &_
                            .submatches(3) & " (" & str & a3 & str1 & ")"
                    intStart = 5
                End With
            End If
        ElseIf re3 Then
            If CheckYes( "(.+) (and|or) ((S*S) (borb|bandb) (S*S))$" , 4 ) Then
                check = False
            Else
                With objNode2
                    a1    = .submatches(0)
                    a2    = .submatches(2)
                    a3    = .submatches(4)
                    check = "(" & str & a1 & str1 & ") " & .submatches(1) & " (" & str & a2 & str1 & " " &_
                            .submatches(3) & " " & str & a3 & str1 & ")"
                    intStart = 5
                End With
            End If
        Else
            check = ORAND()
        End If
    End Function

End Class
-------------------------注意-----------------------------
替换好的字符串并不是完整的SQL语句.只是生成SQL语句的WHERE关键字后面的表达式.发送到ASP程序的时候.你可以在前面加上
"select id,标题,name,TableName from SearchAll where "
这样类似的SQL语句
-------------------------VBScript例子-----------------------------
    Dim objROOT1
    Set objROOT1 = new CreateQueryString
    objROOT1.QueryString = strText '====传入要替换的字符串
    objROOT1.strField = "要查询的字段名字" '===如果不设置.默认值是"(标题+文章)"
    strText = objROOT1()  '=========得到替换好的SQL语句
    If (objQueryString.intStart = 4) Then
        Call Msgbox("启动按逻辑搜索")
    End If
    Set objROOT1 = Nothing

 


录入时间:2006-08-18 16:26:49 [打印本页] [关闭窗口] [返回顶部]
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

Copyright © 2006-2014 0733168.Com Inc All Rights Reserved
关于我们 | 广告合作 | 联系我们 | 法律声明 | 友情链接 | 意见反馈
本站所收录信息、社区话题、及本站所做之广告均属其个人行为,与本站立场无关
湘ICP备06008436号