Hace algún tiempo, escribí una función de búsqueda difusa de múltiples campos (similar a baidui). El código de función es el siguiente.
'=================================================== = =
'Nombre de la función: palabra clave_sousuo
'Función: Generar condiciones de consulta SQL
'Parámetros: table_field ------ nombres de campos de la tabla (separados por comas)
' palabra clave ------ Palabras clave de búsqueda (separadas con espacios)
'Retorno: condiciones de consulta SQL
'=================================================== = =
función palabra clave_sousuo(byval table_field,byval palabra clave)
dim str01,str02,palabras clave,table_fields,i,j
campos_tabla=dividir(recortar(campo_tabla),,)
palabras clave = dividir (recortar (palabra clave),,)
si campo_tabla<> entonces
str01=(&table_fields(0)& como '%&palabra clave&%'
para j=0 a ubound(table_fields)
str01=str01& o &table_fields(j)& como '%&palabra clave&%'
próximo
cadena01=cadena01&)
demás
respuesta.Write(<script>alert('¡Error de parámetro (no puede estar vacío)!')</script>)
respuesta.Fin()
terminar si
'Ancho completo -> Espacio de medio ancho
'palabra clave=reemplazar(palabra clave, , )
'mientras InStr(palabra clave, )>0
'palabra clave=reemplazar(palabra clave, , )
'encaminarse a
palabras clave = dividir (palabra clave,)
si ubound(palabras clave)>0 entonces
para i=0 a ubound(palabras clave)
str02=str02&(&table_fields(0)& como '%&palabras clave(i)&%'
para j=1 a ubound(table_fields)
str02=str02& o &table_fields(j)& como '%&keywords(i)&%'
próximo
cadena02=cadena02&)
próximo
str02=(&reemplazar(str02,)(,)y()&)
palabra clave_sousuo=( & str01 & o & str02 & )
demás
palabra clave_sousuo=str01
terminar si
función final
'=================================================== = =
'Nombre de la función: etiqueta_palabra clave
'Función: Marca las palabras clave en la cadena en rojo
'Parámetro: cadena ------ cadena
' palabra clave ------ marcar palabras clave (separadas con espacios)
'Retorno: cadena (formato html)
'=================================================== = =
función etiqueta_palabra clave (cadena byval, palabra clave byval)
palabras clave tenues, str01, str02, i
'Ancho completo -> Espacio de medio ancho
'palabra clave=reemplazar(palabra clave, , )
'mientras InStr(palabra clave, )>0
'palabra clave=reemplazar(palabra clave, , )
'encaminarse a
str01=reemplazar(cadena,palabra clave,<font color=#ff0000>&palabra clave&</font>)
palabras clave = dividir (palabra clave,)
si ubound(palabras clave)>0 entonces
str02=cadena
para i=0 a ubound(palabras clave)
str02=reemplazar(str02,palabras clave(i),<font color=#ff0000>&palabras clave(i)&</font>)
próximo
etiqueta_palabra clave=str02
demás
etiqueta_palabra clave=str01
terminar si
función final
El siguiente es un ejemplo http://www.zhouhaihe.com/blog/uploads/200604/recordread.asp
<%@LANGUAGE=PÁGINA DE CÓDIGOS VBSCRIPT=936%>
<%
opción explícita
conexión tenue, connstr, base de datos
connstr=DBQ=+server.mappath(record.mdb)+;DefaultDir=;DRIVER={Controlador de Microsoft Access (*.mdb)};
establecer conexión=servidor.CreateObject(adodb.conexión)
conn.open connstr
dim n,rs,página,palabra clave,palabras clave,RecordCount,pageCount,pos,i,sql_where
n=50
página=Solicitud(página)
palabra clave = recortar (solicitud (palabra clave))
sql_where=palabraclave_sousuo(título,cz,nombre,hora,palabra clave)
establecer rs=servidor.CreateObject(adodb.recordset)
rs.open seleccione * del registro donde &sql_where& ordene por id desc,conn,1,2
si página = 0 entonces
página=1
terminar si
Número de registros = 0
hacer mientras no rs.Eof
CuentaRegistros = CuentaRegistros +1
rs.MoverSiguiente
bucle
si no RecordCount=0 entonces
rs.MoveFirst
terminar si
pageCount=RecordCount/n
número de páginas=int(número de páginas)
si (RecordCount mod n)>0 entonces
Recuento de páginas=Recuento de páginas +1
terminar si
%>
<tipo de estilo=texto/css>
<!--
.ESTILO3 {color: #666666}
-->
</estilo>
<ancho de tabla=100% borde=0 espacio entre celdas=0 relleno de celdas=0>
<id de formulario=nombre de formulario1=método de formulario1=acción de publicación=?><tr><td align=center><nombre de entrada=tipo de palabra clave=id de texto=valor de palabra clave=<%=palabra clave%> tamaño=30 />
<tipo de entrada=nombre de envío=valor de envío=búsqueda/>
<span class=STYLE3>(Separe las palabras clave con espacios) </span></td>
</tr></formulario>
<tr>
<td altura=5></td>
</tabla>
<ancho de tabla=600 borde=1 align=center cellpadding=4>
<tr align=centro>
<td width=131>Título</td>
<td width=131>Acción</td>
<td width=131>Nombre de usuario</td>
<td width=132>Tiempo</td>
</tr>
<%pos=0
hacer mientras pos<(página-1)*n
pos=pos+1
rs.moveSiguiente
bucle
yo=0
mientras que no rs.eof y i<n
yo=yo+1%>
<tr align=centro>
<td><%=keyword_tag(rs(título),palabra clave)%></td>
<td><%=keyword_tag(rs(cz),palabra clave)%></td>
<td><%=keyword_tag(rs(nombre),palabra clave)%></td>
<td><%=keyword_tag(rs(hora),palabra clave)%></td>
</tr>
<%rs.movenext
encaminarse a
rs.cerrar
establecer rs = nada
con.cerrar
establecer conexión = nada
'=================================================== = =
'Nombre de la función: palabra clave_sousuo
'Función: Generar condiciones de consulta SQL
'Parámetros: table_field ------ nombres de campos de la tabla (separados por comas)
' palabra clave ------ Palabras clave de búsqueda (separadas con espacios)
'Retorno: condiciones de consulta SQL
'=================================================== = =
función palabra clave_sousuo(byval table_field,byval palabra clave)
dim str01,str02,palabras clave,table_fields,i,j
campos_tabla=dividir(recortar(campo_tabla),,)
palabras clave = dividir (recortar (palabra clave),,)
si campo_tabla<> entonces
str01=(&table_fields(0)& como '%&palabra clave&%'
para j=0 a ubound(table_fields)
str01=str01& o &table_fields(j)& como '%&palabra clave&%'
próximo
cadena01=cadena01&)
demás
respuesta.Write(<script>alert('¡Error de parámetro (no puede estar vacío)!')</script>)
respuesta.Fin()
terminar si
'Ancho completo -> Espacio de medio ancho
palabra clave=reemplazar(palabra clave, , )
' mientras InStr(palabra clave, )>0
'palabra clave=reemplazar(palabra clave, , )
'encaminarse a
palabras clave = dividir (palabra clave,)
si ubound(palabras clave)>0 entonces
para i=0 a ubound(palabras clave)
str02=str02&(&table_fields(0)& como '%&palabras clave(i)&%'
para j=1 a ubound(table_fields)
str02=str02& o &table_fields(j)& como '%&keywords(i)&%'
próximo
cadena02=cadena02&)
próximo
str02=(&reemplazar(str02,)(,)y()&)
palabra clave_sousuo=( & str01 & o & str02 & )
demás
palabra clave_sousuo=str01
terminar si
función final
'=================================================== = =
'Nombre de la función: etiqueta_palabra clave
'Función: Marca las palabras clave en la cadena en rojo
'Parámetro: cadena ------ cadena
' palabra clave ------ marcar palabras clave (separadas con espacios)
'Retorno: cadena (formato html)
'=================================================== = =
función etiqueta_palabra clave (cadena byval, palabra clave byval)
palabras clave tenues, str01, str02, i
'Ancho completo -> Espacio de medio ancho
palabra clave=reemplazar(palabra clave, , )
'mientras InStr(palabra clave, )>0
'palabra clave=reemplazar(palabra clave, , )
'encaminarse a
str01=reemplazar(cadena,palabra clave,<font color=#ff0000>&palabra clave&</font>)
palabras clave = dividir (palabra clave,)
si ubound(palabras clave)>0 entonces
str02=cadena
para i=0 a ubound(palabras clave)
str02=reemplazar(str02,palabras clave(i),<font color=#ff0000>&palabras clave(i)&</font>)
próximo
etiqueta_palabra clave=str02
demás
etiqueta_palabra clave=str01
terminar si
función final
tenue y
%> <tr align=centro>
<td colspan=4> <%=RecordCount%><font color=#FF0000><%=page%></font>/<%=pageCount%> páginas
<%=n%> páginas/página ir a:
<SELECT nombre=seleccionar onchange=window.open(this.options[selectedIndex].value,'_self') >
<%y=1
hazlo mientras y<pagecount+1%>
<OPCIÓN valor=?página=<%=y%>&keyword=<%=server.URLEncode(palabra clave)%> <%if cstr(página)=cstr(y) luego respuesta.Escribir (seleccionado) finaliza si%> > Página <%=y%></OPCIÓN>
<%y=y+1
bucle%>
</SELECT></td>
</tr>
</tabla>