下沙论坛

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

QQ登录

QQ登录

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

一个用于搜索的函数

[复制链接]

该用户从未签到

跳转到指定楼层
1
发表于 2005-4-14 10:40:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
'====================================================================
5 D, m4 s5 G1 s( }'= Copyright (c) 2005 Eason Chan All Rights Reserved.
  l, \0 e( I8 C4 m, `" N. Z1 R'=-------------------------------------------------------------------
  L, i1 O2 Y: C% H'= 摘    要:格式化搜索字符函数' E5 ~% m2 j. E9 ]: n
'=-------------------------------------------------------------------
' P2 m4 t/ p* ~'= 最后更新:eason007& r) [% f: f0 o
'= 最后日期:2005-01-21+ y& j  J3 F' c3 n, {
'====================================================================  {+ Q2 u) A- M4 Q
Function MakeSQLQuery(QueryField,QueryStr)! p% w2 u, }, g7 O
     Dim TagStart,TagEnd' O! z, k. H1 s2 U9 {: C, u
     Dim TempStr,TempArray
! ~7 a. C, K% C; P     Dim FullQueryStr3 U8 P; F/ k3 B6 @7 g
     Dim i,Way: Q0 {: {* Q) g; n+ V
     $ M. q2 l/ _$ X* t* e; L
     '先找引号定界符
/ H. ?0 N( N5 D. J8 l- C  V3 f     Do
3 c& w5 p+ `) g           TagStart=InStr(QueryStr,"\")
. A# b- I$ [& `, o- u; A           If TagStart>0 Then
  \7 L# A# J4 D1 h0 K" L- y                 TagEnd=InStr(TagStart+1,QueryStr,"\")
# k( I5 o; Y8 X                 
+ \0 e9 T& P7 k% v                 TempStr=Mid(QueryStr,TagStart+1,TagEnd-TagStart-1)9 v& }0 |' [3 [$ t' w! U
                 TempStr=Replace(TempStr," ","#")+ N7 L% C5 ^9 B4 H* X
                 - L- x. o4 k. a5 [( D
                 QueryStr=Left(QueryStr,TagStart-1)&TempStr&Right(QueryStr,Len(QueryStr)-TagEnd)
4 S; `, D: C) E( O# f3 j           End If, D. W6 M/ H3 i
     Loop While TagStart>0; E# A# x$ p" G9 N' g9 w; \( a* A0 t
     
* k" U- f# ^" R; V( q     '处理or定界符- l6 W0 h  x4 S- J, I
     QueryStr=Replace(QueryStr,"|"," @")' o+ X( p$ M2 m' B, C
     '分隔关键字
) {/ z* P- E) g7 V" ], n     TempArray=Split(QueryStr," ")7 W& M. c3 L5 A7 v/ a
     
7 M+ n6 x$ Q. H+ x* i# b     For i=0 To UBound(TempArray)$ B8 D2 w4 K9 `) q$ C: j2 A6 }% W, g. S
           If Left(TempArray(i),1)="@" Then
' U: O- m2 W- e5 s& d4 W( y                 FullQueryStr=FullQueryStr&" Or "&QueryField; C0 r4 B) y" z
                 TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)
* D, E* s) g# T  P4 B# b! k+ c! I           Else
6 S9 L2 Y2 g" h1 P                 FullQueryStr=FullQueryStr&" And "&QueryField! ~! w% G. C! e2 `
           End If
7 G, H# C) |1 Y/ \0 [           
& \9 f5 g* @5 f. Q  ^: Z1 z           If Left(TempArray(i),1)="-" Then
) W! a/ M& k2 F" U* M' b& m                 FullQueryStr=FullQueryStr&" Not "
# v% x! o4 V' w" a( G- K7 S                 TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)
: a; R1 ?' ?# _8 |1 z* o5 n+ h           End If
! G# j0 c+ L: F& Y           8 f6 E2 K7 T2 j
           FullQueryStr=FullQueryStr&" Like '%"&TempArray(i)&"%'"$ x8 f6 V. a$ E" e6 Y4 b6 I5 V
           2 G% f" U& \- ~  S, G, L( g$ s
           FullQueryStr=Replace(FullQueryStr,"%$","")  w0 W0 Z8 Z0 I, v
           FullQueryStr=Replace(FullQueryStr,"$%","")- ?7 l* i! `6 I. D
           FullQueryStr=Replace(FullQueryStr,"#"," ")' s# G1 Y$ C, U9 x
     Next9 G$ A1 \2 W# F, o
     
5 @  w# h* J/ o9 d7 ^! y     MakeSQLQuery=FullQueryStr$ J# _0 l+ w' h/ _3 ^; g  ?
End Function
6 y: m. E6 x: C+ E: {4 R) |) g! z3 e6 O
3 S. B, G7 V" K# |. u
说明:" f% q: v  o5 R
用于搜索时,用户可进行复杂的查找,当前1。0版本只支持单字段的搜索,有心人士可自行修改为支持多字段,但请保留我的版权信息。
- y$ s* }& R. u& d7 k1 O如有疏忽之处,还请原谅!( h2 V/ Q% s$ L1 x' {: h0 J! ~
/ ^7 ?" P3 A/ p3 g3 L
示例:
/ ?7 @, A/ x0 l1、 空格连接=and,如 你好 我要=%你好% and %我要% 1 ?6 ?- [" _0 Y( k/ a
2、 避免内容包含字符=-,如 你好 -我要=%你好% and not like %我要%
, h1 F& I& J0 N& M# N, e3、 |=or,如 你好|我要=%你好% or %我要% ! s# q$ o- E. Y: ?( {" z! B: I
4、 词组搜索用双引号包含,如 \i love this game\=%i love this game%,而非=i and love and this and game + I* N) z3 o  a0 l
5、 $为定界符,如 $你好=以 你好 开头的字符,你好$=以 你好 结尾的字符
* K; C0 d; t" l  P" H( |
% S1 X! f% w4 Z2 u组合查询 4 e# S9 U, |9 D( K1 c3 \! Y
如 \i love this game\|-你好=%i love this game% and not like %你好% 4 M5 ^9 ]1 D1 ?! v
如 我要$|-$你好=%我要 or not like 你好% , o# N9 F( _% N; z
如 $\i love this game\ $你好$=i love this game% and like 你好 ) J) g2 U; R- n2 X, ?. K3 _, v
% Q, p# w- I! i4 m6 l1 a
调用:& `1 M6 v( B0 ~$ i) ?

# q) x* w0 U- h7 r* |  L: HDim SQL,WSQL" P5 Z$ ?3 c7 R* `) I; _; K) J/ S) k
Dim Keyword,Field
) W* h# {8 i( r4 ^/ X9 S
9 t% u( M" @# s; D& f5 V'get keyword  s: U4 B+ Y( o) R, i5 x$ C
Keyword=Request("keyword"); |. D, L/ a: @9 }: {
Field=Request("field")& d$ c% @( n. P2 \' r; D, j
9 A- I8 k& C* O3 [- q$ y  _
WSQL=MakeSQLQuery(Field,Keyword)& p8 [3 j& L! f0 ^% ?6 L- `- D
* R0 [- [8 J/ ]# V: t+ l* e
SQL="SELECT * FROM table1 WHERE 1=1 "&WSQL
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩

该用户从未签到

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

哦,

本版积分规则

关闭

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

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