下沙论坛

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

QQ登录

QQ登录

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

一个用于搜索的函数

[复制链接]

该用户从未签到

跳转到指定楼层
1
发表于 2005-4-14 10:40:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
'====================================================================' ^9 {7 D0 [; p
'= Copyright (c) 2005 Eason Chan All Rights Reserved.
8 X  W3 a' ~, F& B. I/ P'=-------------------------------------------------------------------- F5 G2 ?9 f& {1 H% d; Y* H! R8 N6 P9 w
'= 摘    要:格式化搜索字符函数. l. }: j( o+ n! P9 m# ~0 r
'=-------------------------------------------------------------------7 D3 _( h) ]- H" I" f
'= 最后更新:eason0073 E% N( c# _+ K! E9 _2 X5 v6 j# ]% u
'= 最后日期:2005-01-21
0 S2 l2 l/ `" f9 n'====================================================================# i# l9 ~5 D3 i! {4 H% r
Function MakeSQLQuery(QueryField,QueryStr)
8 z; ^% A) {: H' w3 ^* {( X: \* a     Dim TagStart,TagEnd
9 x" o- K" b1 D7 j% k4 ^2 ?4 m     Dim TempStr,TempArray: w5 M  r' k* C# S5 y: a( p# L
     Dim FullQueryStr  X3 J( r0 f/ d: X( |4 l& T  Z
     Dim i,Way2 K) k) u/ i6 U
     ' Q7 ~. t+ V. G+ m0 o+ x' y
     '先找引号定界符
. ~. x& \/ M" L! U, z" w, F     Do
4 n( o4 m! ]$ C+ ]           TagStart=InStr(QueryStr,"\")+ [8 ]/ X2 }9 r1 S1 c6 r- B2 r
           If TagStart>0 Then - G, r" M/ j, N/ S5 C
                 TagEnd=InStr(TagStart+1,QueryStr,"\")
) F# I1 I9 x: b: I4 |/ w# Y                 ; r$ A& `: f- T3 H$ X
                 TempStr=Mid(QueryStr,TagStart+1,TagEnd-TagStart-1)  i) i7 D4 m2 S! B
                 TempStr=Replace(TempStr," ","#")
: }! }+ \) X; V( z                 6 `$ D8 r! e/ V4 A
                 QueryStr=Left(QueryStr,TagStart-1)&TempStr&Right(QueryStr,Len(QueryStr)-TagEnd)9 q1 I4 h- d& M) ^* P3 ^1 O3 E
           End If
/ s* i6 j) P" m( q     Loop While TagStart>0
' h" k, ~% A7 k     
+ i3 o/ {0 K9 H2 ~2 i     '处理or定界符
2 c+ s7 W5 u; f     QueryStr=Replace(QueryStr,"|"," @")
- w! x4 @' K: V5 y     '分隔关键字: M/ P6 N# `0 d" n
     TempArray=Split(QueryStr," ")9 ?7 g) R1 G$ X+ [7 z' S% v
     
7 H. i, R5 b  t# \& O5 ^; I     For i=0 To UBound(TempArray)% }9 x+ Y. n" q% ], J( s) K1 J: g
           If Left(TempArray(i),1)="@" Then
, F/ Q. @( D/ s: z& _6 o, Z  ~                 FullQueryStr=FullQueryStr&" Or "&QueryField, W) {4 C0 R% J/ [1 d- o
                 TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)
0 G  ~6 `7 u! S/ i1 I& P- q; r           Else3 j( P$ N4 N: r4 q- X/ k
                 FullQueryStr=FullQueryStr&" And "&QueryField
/ H8 ?4 \/ F1 G) `           End If6 c$ c. Q% _& t1 E
           * u4 r: P. F, A9 w" O; X, C' }
           If Left(TempArray(i),1)="-" Then
7 J& O0 A0 c& s3 }: G                 FullQueryStr=FullQueryStr&" Not "0 ^$ {4 e* q# D; j- R* u
                 TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)0 p* L( l$ C2 u3 [2 r$ X
           End If9 ~# S4 ]3 \1 W8 H( b0 q( d
           
8 _) ^2 [$ G. q           FullQueryStr=FullQueryStr&" Like '%"&TempArray(i)&"%'"
: _, J% H3 G! x$ Y           ) d# q, `- o3 d! t, m' }7 G: x
           FullQueryStr=Replace(FullQueryStr,"%$","")! E+ ?+ X# B9 G; [  U& m
           FullQueryStr=Replace(FullQueryStr,"$%","")
6 ]$ k+ s( K5 g+ p6 {           FullQueryStr=Replace(FullQueryStr,"#"," ")
; x& o& q" r+ o4 L7 c6 k     Next
- X! v4 j; k) ]0 \5 ?, f4 o& A     
1 S2 ^, e, W' M$ ~     MakeSQLQuery=FullQueryStr
% k2 Y* P1 \! AEnd Function( a9 U% X( d. m) f* v8 @' s7 i

9 a! D: X' X9 V1 r, m5 y& x2 Y2 r0 G3 ?- `9 ]. t1 Y. m
说明:$ z$ w9 n9 F& W$ G) C7 J8 U2 V5 j
用于搜索时,用户可进行复杂的查找,当前1。0版本只支持单字段的搜索,有心人士可自行修改为支持多字段,但请保留我的版权信息。3 X* I7 }. t( @8 ?7 N" L9 f" {
如有疏忽之处,还请原谅!
' d( ^) R  L* G
) \6 L. ?* B) N示例:" C0 R1 t! ~! B
1、 空格连接=and,如 你好 我要=%你好% and %我要%
) T! n* Y" W' P7 `0 ^2、 避免内容包含字符=-,如 你好 -我要=%你好% and not like %我要% $ q/ N+ R% ~  S
3、 |=or,如 你好|我要=%你好% or %我要% ' ~) l+ `1 c# m  v/ x
4、 词组搜索用双引号包含,如 \i love this game\=%i love this game%,而非=i and love and this and game ( ~/ {/ K6 h1 A$ c
5、 $为定界符,如 $你好=以 你好 开头的字符,你好$=以 你好 结尾的字符 : A+ O  f3 V* Z( C+ a1 i
8 n" _" R1 ~: g" B' {# N; L- @$ c
组合查询
' w; H9 m, Z# V$ I# Z1 O5 a0 W如 \i love this game\|-你好=%i love this game% and not like %你好%
* c. x9 l( y4 Y' J3 v4 e( _$ x如 我要$|-$你好=%我要 or not like 你好% & N! S) o2 ^1 E& I: D
如 $\i love this game\ $你好$=i love this game% and like 你好 ' F2 V0 ~7 B) O- l: _
% t, v1 M9 G8 ^1 M; V, f
调用:
5 I5 i) X6 G+ t- B/ ~! V0 X* r
. M/ a/ e% G9 dDim SQL,WSQL
; e, A4 |, ^" Z) l4 z' Y1 `Dim Keyword,Field
% |/ r) o2 f4 ^& D* i: J; X& R; S  H) D; N: V. R( D+ j
'get keyword
( k" u0 _* M: j) s, tKeyword=Request("keyword")1 R9 o2 N5 {( @- Q8 q& k+ M% N
Field=Request("field")
( s7 j. P3 n: i. i# @# l8 V5 M' ~5 S% d
WSQL=MakeSQLQuery(Field,Keyword)
  @9 p' ?7 a4 Y2 H5 y5 e- |, o. m
SQL="SELECT * FROM table1 WHERE 1=1 "&WSQL
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩

该用户从未签到

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

哦,

本版积分规则

关闭

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

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