下沙论坛

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

QQ登录

QQ登录

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

一个用于搜索的函数

[复制链接]

该用户从未签到

跳转到指定楼层
1
发表于 2005-4-14 10:40:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
'====================================================================
* @$ H, N! A& h1 ~'= Copyright (c) 2005 Eason Chan All Rights Reserved.
3 l" O% a% M, D: F: u'=-------------------------------------------------------------------
: ~  U4 D; C  J% o+ N' s2 d'= 摘    要:格式化搜索字符函数
2 H6 L/ I$ {4 U: _. S'=-------------------------------------------------------------------5 _# l& @( F9 l8 y4 D
'= 最后更新:eason0072 s6 ]3 f& _/ p5 ]" J
'= 最后日期:2005-01-21
8 [6 M' p! ?" F# f3 B% L'====================================================================
$ _5 U% b3 w) e. C( ]Function MakeSQLQuery(QueryField,QueryStr)# M) T3 c: V/ B4 `) d5 Z, A
     Dim TagStart,TagEnd  \) j) K3 d  K0 {' Q  o: d
     Dim TempStr,TempArray4 Q9 A2 B6 u  l9 i$ w# B. B. O- |2 C. s
     Dim FullQueryStr7 E4 O) ~/ c3 ?0 m7 e- g: W
     Dim i,Way1 W% A! D  [( d( ]. v( d: @1 N% M
     
( z3 p: p& `, C- a! S     '先找引号定界符
+ f2 _, h% D/ i2 j% O. W, c* i     Do
3 o. E/ d6 K- F& }4 s           TagStart=InStr(QueryStr,"\")
6 `/ [! w/ H  E           If TagStart>0 Then
: I9 y; l& ?: [$ U# ?, [! e                 TagEnd=InStr(TagStart+1,QueryStr,"\")
" E0 v+ a7 ?$ H, g' Z                 ) L3 _  J4 t* O4 ?# A8 x5 T
                 TempStr=Mid(QueryStr,TagStart+1,TagEnd-TagStart-1)0 t" x( w( t8 Z( {
                 TempStr=Replace(TempStr," ","#")
5 P4 h( i1 }' O& M                 
% k4 b* s2 I* u$ ~2 k: f5 A% K                 QueryStr=Left(QueryStr,TagStart-1)&TempStr&Right(QueryStr,Len(QueryStr)-TagEnd)/ s  o% Q* [' [
           End If0 j- ~. g! U  C2 Y, v
     Loop While TagStart>0( i$ Z# M' _/ f) M# p% d& u- ~1 F4 `/ L
     
1 }! n, m- D- v     '处理or定界符$ r) F- H! _$ {/ T3 m5 d
     QueryStr=Replace(QueryStr,"|"," @")
# M8 y: R3 U0 V# E6 t- J* R' ~     '分隔关键字
$ h+ ]5 Y8 J8 F/ r% N% k1 L     TempArray=Split(QueryStr," ")
9 s1 k3 _1 E7 }9 I3 f' ~" j     
" B: w% r% N8 O  }     For i=0 To UBound(TempArray)
% [9 |, S1 Q+ @/ l, ^0 J6 m           If Left(TempArray(i),1)="@" Then
% x9 \3 z( Z9 [2 l                 FullQueryStr=FullQueryStr&" Or "&QueryField
" |/ u$ }7 P. y/ q' k; ^                 TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)
3 s2 s( K& d0 A# _           Else
! D1 M/ X) S+ C7 ?$ ^                 FullQueryStr=FullQueryStr&" And "&QueryField
& l$ A* `% j: f. x1 Q7 d& d           End If
' F* Z5 ^2 L! C1 k           
, Y) @7 T, Q/ Q  Q           If Left(TempArray(i),1)="-" Then 9 C4 Y6 O( h& k, `
                 FullQueryStr=FullQueryStr&" Not "  ?+ S) F  i8 h% t4 E; a  E$ v
                 TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)$ C- Q' i8 g( ~1 S
           End If/ ^; ~8 o2 J6 s* H/ q
           9 N0 f& Z* \5 U) n$ o) ?$ a
           FullQueryStr=FullQueryStr&" Like '%"&TempArray(i)&"%'"
( i+ u; e3 x0 R. F           1 Q2 r# G3 O6 E: \% e
           FullQueryStr=Replace(FullQueryStr,"%$","")
$ V6 @+ l' H* d1 O           FullQueryStr=Replace(FullQueryStr,"$%","")0 Y5 |' q. Z, R
           FullQueryStr=Replace(FullQueryStr,"#"," ")$ Y% C6 L* F6 Q5 ~3 J4 x
     Next! [$ P( X3 D9 H3 H7 n
     % q# V) }+ q- i2 R/ K6 X3 \1 t
     MakeSQLQuery=FullQueryStr% b( k+ d5 k7 L: a4 x
End Function
3 Q/ M6 ~. Q  s# Z& G& h: s. @; L1 t5 P

+ X4 f2 c7 C7 m1 }, C, e3 ]说明:
' [* z2 z. N( R) k/ c& H用于搜索时,用户可进行复杂的查找,当前1。0版本只支持单字段的搜索,有心人士可自行修改为支持多字段,但请保留我的版权信息。
/ _3 R$ v$ P" C! W; Z  h0 w; R7 T如有疏忽之处,还请原谅!. ?/ ^* I/ m* |, R' K
1 ^/ I+ E5 J; p( I* M! w
示例:3 X( ?- @" J$ _3 B4 S
1、 空格连接=and,如 你好 我要=%你好% and %我要%
) N1 G/ S0 J  a) f4 ?2、 避免内容包含字符=-,如 你好 -我要=%你好% and not like %我要%
- A3 t$ e. T! _6 M: x# {3、 |=or,如 你好|我要=%你好% or %我要% : ^; z3 S; x( v( Y( V9 `
4、 词组搜索用双引号包含,如 \i love this game\=%i love this game%,而非=i and love and this and game
; a* W. S8 W% {  w1 D5、 $为定界符,如 $你好=以 你好 开头的字符,你好$=以 你好 结尾的字符 " i# O! W' s6 }9 [# @# ^2 Q
) G7 s$ X. t; g8 h# `0 ^' {
组合查询 1 V/ T" I5 P2 f  }/ C
如 \i love this game\|-你好=%i love this game% and not like %你好% $ h5 @6 o. k0 n# g
如 我要$|-$你好=%我要 or not like 你好%
' k: E+ g! {/ d5 _如 $\i love this game\ $你好$=i love this game% and like 你好 ! a- H+ P$ l6 P4 w2 s! I# H% q
+ H6 x+ g, Q' B% E
调用:9 o+ P) Q: s: o3 X( l& ~+ z, o' Q

- M; g- }- O3 \3 e8 M! @Dim SQL,WSQL
5 v; V2 m/ p7 RDim Keyword,Field) Z# a" ]! i5 i1 @* a7 G5 F
+ ]' k5 \4 l# I' u8 S( d
'get keyword
/ {8 A- W* f6 T" q$ Z" r3 FKeyword=Request("keyword")/ a/ J6 m$ c: V8 t* @! c. A
Field=Request("field")+ W& z+ E; f* N6 ~6 X/ w
  v8 \4 l- f( N4 O# c4 k: Q
WSQL=MakeSQLQuery(Field,Keyword)
: K) f! D% H3 p, m7 d+ j& Z. m; l& _, `
SQL="SELECT * FROM table1 WHERE 1=1 "&WSQL
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩

该用户从未签到

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

哦,

本版积分规则

关闭

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

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