下沙论坛

 找回密码
 注册论坛(EC通行证)

QQ登录

QQ登录

下沙大学生网QQ群8(千人群)
群号:6490324 ,验证:下沙大学生网。
用手机发布本地信息严禁群发,各种宣传贴请发表在下沙信息版块有问必答,欢迎提问 提升会员等级,助你宣传
新会员必读 大学生的论坛下沙新生必读下沙币获得方法及使用
查看: 3205|回复: 1
打印 上一主题 下一主题

一个用于搜索的函数

[复制链接]

该用户从未签到

跳转到指定楼层
1
发表于 2005-4-14 10:40:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
'====================================================================
6 e$ e9 [  R! N5 P5 ]0 r'= Copyright (c) 2005 Eason Chan All Rights Reserved.4 }5 J" j( z; x% j8 `
'=-------------------------------------------------------------------
4 F( u; T2 l8 v; m* S- q$ o* c'= 摘    要:格式化搜索字符函数& q# C* S( x; S0 S% T% @; h! S8 U( K$ W
'=-------------------------------------------------------------------
+ v$ {% R% B  f( D'= 最后更新:eason007+ B) x  ~. q7 |& X7 m4 B
'= 最后日期:2005-01-21/ `% U6 ]9 E( M7 f6 |, e2 p) R
'====================================================================
0 v. F# O( A$ f+ H. Q8 HFunction MakeSQLQuery(QueryField,QueryStr)
0 E1 l# r  |) M, `% }% r0 _     Dim TagStart,TagEnd
  R$ n$ @: u: p/ o$ M( M     Dim TempStr,TempArray
' w' O( B) O+ @: o5 [. C# x     Dim FullQueryStr
5 b- y# I3 U+ j0 @, a, x! C     Dim i,Way6 m3 }1 f; ^4 h% Z( \/ B
     ! h4 }6 t! k8 c7 j2 c* U; h
     '先找引号定界符
3 C1 d' O2 [# l: `6 Y7 p. `6 w     Do. A1 p2 D" r- j# Q3 A9 _
           TagStart=InStr(QueryStr,"\")
/ D- G+ ?$ O: X# K% C           If TagStart>0 Then * m' V+ j6 Y3 B2 C. t0 @
                 TagEnd=InStr(TagStart+1,QueryStr,"\")
2 B- |5 g! x- a! o; q2 v8 T2 x                 0 W1 d" O) W" w6 V( @
                 TempStr=Mid(QueryStr,TagStart+1,TagEnd-TagStart-1)8 F5 ^! Q# B3 S, C% ]
                 TempStr=Replace(TempStr," ","#")
- @* Y. R7 i: @- X! O                   y8 A2 E' l* u, e1 S
                 QueryStr=Left(QueryStr,TagStart-1)&TempStr&Right(QueryStr,Len(QueryStr)-TagEnd)
' I) ]* I. T6 G% ?  A' x           End If
1 ]9 Q, O( \+ n     Loop While TagStart>0- j2 |8 a7 Y4 K( T# j: z
     
) r8 ^4 x1 V! ]( E; j. ?     '处理or定界符1 N* \! g0 }  P3 y  i$ q/ @2 g
     QueryStr=Replace(QueryStr,"|"," @")  |5 d: e- ?. w# J) S+ z  ?* U
     '分隔关键字+ [/ V9 u* D  d' h; E- C
     TempArray=Split(QueryStr," ")
+ X7 n4 }' A( j# X4 b) b     . f1 ]. u2 Q( V1 k6 n. R4 M$ ^
     For i=0 To UBound(TempArray)- a; b0 |2 D$ M- W
           If Left(TempArray(i),1)="@" Then
: v# T# [7 Y! |7 B. q                 FullQueryStr=FullQueryStr&" Or "&QueryField* ~$ Z0 o9 _, j# q$ j8 z+ I
                 TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)$ l! `% t7 w8 e; {% R, y" M
           Else
+ d7 j* Y2 p0 O) f                 FullQueryStr=FullQueryStr&" And "&QueryField
6 S; M1 m) z" l6 P# J  b; b/ w           End If
. L! O; v' H, r. \) ^! X           
5 q7 N# b7 n' A1 b5 d           If Left(TempArray(i),1)="-" Then
2 [- {& O4 K$ i1 y" M, z  x9 B) p                 FullQueryStr=FullQueryStr&" Not "+ w$ P# z+ @: Z- c
                 TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)
( E) X1 q, ~' W6 x$ c: q) ^& |           End If
( Q6 K. V: _8 T3 h           ' B9 s7 ^3 D7 _! X4 k7 U
           FullQueryStr=FullQueryStr&" Like '%"&TempArray(i)&"%'"$ B: G" W. z/ p! ~# u0 _
           ) H/ s0 \8 U/ ^) l) @/ T. ~
           FullQueryStr=Replace(FullQueryStr,"%$","")
8 u3 l6 {4 T) q' g% d8 v           FullQueryStr=Replace(FullQueryStr,"$%","")8 r# _1 J/ n% F3 r
           FullQueryStr=Replace(FullQueryStr,"#"," ")6 S! i  m+ h) {6 I! _; V7 X8 J
     Next$ q; Q4 }2 N* @  \
     : \6 H3 l* e( P! Z2 Q
     MakeSQLQuery=FullQueryStr
2 R7 e2 t, q* g3 c) _' Q& N) wEnd Function
1 F! O; O. S' r3 _* G
  [  I0 j* I$ m% Z' q" _& X% E8 p, a: s. ]6 f
说明:
  L( R/ T! Z& e, l用于搜索时,用户可进行复杂的查找,当前1。0版本只支持单字段的搜索,有心人士可自行修改为支持多字段,但请保留我的版权信息。
8 `% Q( ]5 h$ w; a; `& B: X6 r如有疏忽之处,还请原谅!
1 z% E2 T! f) P. x0 s
3 n  B# E: I9 [. o示例:
6 h6 h- [1 P" r9 d3 R  ^. @/ |1、 空格连接=and,如 你好 我要=%你好% and %我要%
0 L: w3 S8 e% R. }' p* J! }' C2、 避免内容包含字符=-,如 你好 -我要=%你好% and not like %我要% & v6 I/ \0 Z& A! @( x
3、 |=or,如 你好|我要=%你好% or %我要%
, z* I6 O) M! _; }. c5 @4、 词组搜索用双引号包含,如 \i love this game\=%i love this game%,而非=i and love and this and game
8 g. L: s, L4 J4 @5、 $为定界符,如 $你好=以 你好 开头的字符,你好$=以 你好 结尾的字符 6 ]2 `( m2 |  I! b' s' e5 G

9 i( d0 a, j0 W1 M% q组合查询 * d3 F* Y: z0 H, \5 b# f
如 \i love this game\|-你好=%i love this game% and not like %你好% 2 m* N, @2 M( |+ Y
如 我要$|-$你好=%我要 or not like 你好%
  k0 r+ p  E. s& Q% O如 $\i love this game\ $你好$=i love this game% and like 你好
# |, j& m. e- b( ?0 I7 z! P3 K; i7 t2 t* }
调用:
* y& H& a/ I4 l7 }* h& o& I: e8 E8 J) C5 B
Dim SQL,WSQL
' U. Y9 |" M  J* G: J4 ^Dim Keyword,Field
% E/ S" V4 m5 G: u7 W/ r. h1 T" H0 C% O9 |  t, |
'get keyword
5 R/ w, V$ V# IKeyword=Request("keyword")/ o$ ^9 u' M( \  V# u
Field=Request("field")
  a: W7 o0 x' u* d. o. P) f/ G+ h' j" u: k8 K: Z
WSQL=MakeSQLQuery(Field,Keyword)- J' e( x2 \* B6 o
* @  u+ R* _6 x( o: v
SQL="SELECT * FROM table1 WHERE 1=1 "&WSQL
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩

该用户从未签到

2
发表于 2005-4-15 12:58:00 | 只看该作者

哦,

本版积分规则

关闭

下沙大学生网推荐上一条 /1 下一条

快速回复 返回顶部 返回列表