Il y a quelque temps, j'ai écrit une fonction de recherche floue multi-champs (similaire à baidui). Le code de fonction est le suivant
'================================================== = =
'Nom de la fonction : mot-clé_sousuo
'Fonction : Générer des conditions de requête SQL
'Paramètres : table_field ------ noms des champs de la table (séparés par des virgules)
' mot-clé ------ Mots-clés de recherche (séparés par des espaces)
'Retour : conditions de requête SQL
'================================================== = =
fonction mot-clé_sousuo (byval table_field, mot-clé byval)
dim str01,str02,mots-clés,champs_table,i,j
table_fields=split(trim(table_field),,)
mots-clés=split(trim(mot-clé),,)
si champ_table<> alors
str01=(&table_fields(0)& comme '%&mot-clé&%'
pour j=0 à ubound(table_fields)
str01=str01& ou &table_fields(j)& comme '%&keyword&%'
suivant
str01=str01&)
autre
réponse.Write(<script>alert('Erreur de paramètre (ne peut pas être vide)!')</script>)
réponse.Fin()
finir si
'Pleine largeur -> Espace demi-largeur
'mot-clé=remplacer(mot-clé, , )
'pendant que InStr(mot-clé, )>0
' mot-clé=remplacer(mot-clé, , )
'wend
mots-clés=split(mot-clé, )
si ubound (mots-clés)>0 alors
pour i = 0 vers ubound (mots clés)
str02=str02&(&table_fields(0)& comme '%&keywords(i)&%'
pour j=1 vers ubound(table_fields)
str02=str02& ou &table_fields(j)& comme '%&keywords(i)&%'
suivant
str02=str02&)
suivant
str02=(&remplacer(str02,)(,)et()&)
mot-clé_sousuo=( & str01 & ou & str02 & )
autre
mot-clé_sousuo=str01
finir si
fonction de fin
'================================================== = =
'Nom de la fonction : mot-clé_tag
'Fonction : Marquez les mots-clés dans la chaîne en rouge
'Paramètre : str ------ chaîne
' mot-clé ------ marquer les mots-clés (séparés par des espaces)
'Retour : chaîne (format html)
'================================================== = =
fonction mot-clé_tag (byval str, mot-clé byval)
mots-clés dim, str01, str02, i
'Pleine largeur -> Espace demi-largeur
'mot-clé=remplacer(mot-clé, , )
'pendant que InStr(mot-clé, )>0
' mot-clé=remplacer(mot-clé, , )
'wend
str01=replace(str,keyword,<font color=#ff0000>&keyword&</font>)
mots-clés=split(mot-clé, )
si ubound (mots-clés)>0 alors
str02=chaîne
pour i = 0 vers ubound (mots clés)
str02=replace(str02,keywords(i),<font color=#ff0000>&keywords(i)&</font>)
suivant
mot-clé_tag=str02
autre
mot-clé_tag=str01
finir si
fonction de fin
Ce qui suit est un exemple http://www.zhouhaihe.com/blog/uploads/200604/recordread.asp
<%@LANGUAGE=VBSCRIPT CODEPAGE=936%>
<%
option explicite
dim conn,connstr,base de données
connstr=DBQ=+server.mappath(record.mdb)+;DefaultDir=;DRIVER={Pilote Microsoft Access (*.mdb)};
définir conn=server.CreateObject(adodb.connection)
conn.open connstr
dim n, rs, page, mot clé, mots clés, RecordCount, pageCount, pos, i, sql_where
n=50
page=Demande(page)
mot clé = trim (demande (mot clé))
sql_where=keyword_sousuo(titre,cz,nom,heure,mot-clé)
définir rs=server.CreateObject(adodb.recordset)
rs.open sélectionnez * à partir de l'enregistrement où &sql_where& commande par identifiant desc,conn,1,2
si page=0 alors
page=1
finir si
Nombre d'enregistrements = 0
faire sans rs.Eof
Nombre d'enregistrements = Nombre d'enregistrements +1
rs.MoveNext
boucle
sinon RecordCount=0 alors
rs.MoveFirst
finir si
pageCount=RecordCount/n
pageCount=int(pageCount)
si (RecordCount mod n)>0 alors
Nombre de pages = Nombre de pages +1
finir si
%>
<type de style=texte/css>
<!--
.STYLE3 {couleur : #666666}
-->
</style>
<largeur du tableau=100% border=0 cellpacing=0 cellpadding=0>
<form id=form1 name=form1 method=post action=?><tr><td align=center><input name=keyword type=text id=keyword value=<%=keyword%> size=30 />
<input type=submit name=Submit value=search/>
<span class=STYLE3>(Séparez les mots-clés par des espaces) </span></td>
</tr></form>
<tr>
<td hauteur=5></td>
</table>
<table width=600 border=1 align=center cellpadding=4>
<tr align=centre>
<td width=131>Titre</td>
<td width=131>Action</td>
<td width=131>Nom d'utilisateur</td>
<td width=132>Heure</td>
</tr>
<%pos=0
faire pendant que pos<(page-1)*n
pos=pos+1
rs.moveSuivant
boucle
je = 0
alors que ce n'est pas rs.eof et i<n
je=i+1%>
<tr align=centre>
<td><%=keyword_tag(rs(title),keyword)%></td>
<td><%=keyword_tag(rs(cz),keyword)%></td>
<td><%=keyword_tag(rs(name),keyword)%></td>
<td><%=keyword_tag(rs(time),keyword)%></td>
</tr>
<%rs.movenext
wend
rs.fermer
définir rs = rien
connexion.fermer
définir conn = rien
'================================================== = =
'Nom de la fonction : mot-clé_sousuo
'Fonction : Générer des conditions de requête SQL
'Paramètres : table_field ------ noms des champs de la table (séparés par des virgules)
' mot-clé ------ Mots-clés de recherche (séparés par des espaces)
'Retour : conditions de requête SQL
'================================================== = =
fonction mot-clé_sousuo (byval table_field, mot-clé byval)
dim str01,str02,mots-clés,champs_table,i,j
table_fields=split(trim(table_field),,)
mots-clés=split(trim(mot-clé),,)
si champ_table<> alors
str01=(&table_fields(0)& comme '%&mot-clé&%'
pour j=0 à ubound(table_fields)
str01=str01& ou &table_fields(j)& comme '%&keyword&%'
suivant
str01=str01&)
autre
réponse.Write(<script>alert('Erreur de paramètre (ne peut pas être vide)!')</script>)
réponse.Fin()
finir si
'Pleine largeur -> Espace demi-largeur
mot clé = remplacer (mot clé, , )
' while InStr(mot-clé, )>0
' mot-clé=remplacer(mot-clé, , )
'wend
mots-clés=split(mot-clé, )
si ubound (mots-clés)>0 alors
pour i = 0 vers ubound (mots clés)
str02=str02&(&table_fields(0)& comme '%&keywords(i)&%'
pour j=1 vers ubound(table_fields)
str02=str02& ou &table_fields(j)& comme '%&keywords(i)&%'
suivant
str02=str02&)
suivant
str02=(&remplacer(str02,)(,)et()&)
mot-clé_sousuo=( & str01 & ou & str02 & )
autre
mot-clé_sousuo=str01
finir si
fonction de fin
'================================================== = =
'Nom de la fonction : mot-clé_tag
'Fonction : Marquez les mots-clés dans la chaîne en rouge
'Paramètre : str ------ chaîne
' mot-clé ------ marquer les mots-clés (séparés par des espaces)
'Retour : chaîne (format html)
'================================================== = =
fonction mot-clé_tag (byval str, mot-clé byval)
mots-clés dim, str01, str02, i
'Pleine largeur -> Espace demi-largeur
mot clé = remplacer (mot clé, , )
'pendant que InStr(mot-clé, )>0
' mot-clé=remplacer(mot-clé, , )
'wend
str01=replace(str,keyword,<font color=#ff0000>&keyword&</font>)
mots-clés=split(mot-clé, )
si ubound (mots-clés)>0 alors
str02=chaîne
pour i = 0 vers ubound (mots clés)
str02=replace(str02,keywords(i),<font color=#ff0000>&keywords(i)&</font>)
suivant
mot-clé_tag=str02
autre
mot-clé_tag=str01
finir si
fonction de fin
faible
%> <tr align=center>
<td colspan=4> <%=RecordCount%><font color=#FF0000><%=page%></font>/<%=pageCount%> pages
<%=n%> pages/page accèdent à :
<SELECT name=select onchange=window.open(this.options[selectedIndex].value,'_self') >
<%y=1
faire pendant que y<pagecount+1%>
<OPTION value=?page=<%=y%>&keyword=<%=server.URLEncode(keyword)%> <%if cstr(page)=cstr(y) then réponse.Write( selected) end if%> > Page <%=y%></OPTION>
<%y=y+1
boucle%>
</SELECT></td>
</tr>
</table>