Entorno de ejecución: IIS
Lenguaje de script: VBScript
Base de datos: Access/SQL Server
Lenguaje de base de datos: SQL
1. resumen:
Ya sea en sitios web dinámicos como foros, sistemas de noticias o sistemas de descarga, a menudo verá funciones de búsqueda: buscar publicaciones, buscar usuarios, buscar software (en resumen, buscar palabras clave), etc. Este artículo presenta cómo crear un Búsqueda práctica y eficiente de valores múltiples en sitios basados en ASP.
Este artículo trata sobre la "búsqueda de coincidencia difusa de múltiples condiciones". Después de comprender múltiples condiciones, la búsqueda de una sola condición es pan comido. En términos generales, existen dos métodos para la búsqueda de múltiples condiciones: método de enumeración y método progresivo. Cuando no hay demasiadas condiciones de búsqueda ( n <= 3), se puede utilizar el método de enumeración. La frecuencia de las declaraciones es 2 elevado a la enésima potencia y n es el número de condición. Obviamente, cuando aumenta el número de condiciones, se debe adoptar el método progresivo independientemente de la eficiencia o realizabilidad del programa. La frecuencia de declaración es n y crece linealmente. Cabe señalar que la idea del método de enumeración es muy simple: determina si las condiciones están vacías una por una y luego busca de acuerdo con las condiciones no vacías. Al mismo tiempo, puede utilizar la tecnología de tabla de verdad. se utiliza para lidiar con situaciones con muchísimas condiciones (creo que nadie hará este tipo de cosas), cuando hay 4 condiciones, hay que escribir 16 grupos de declaraciones); el método progresivo es más ingenioso y se centra en la comprensión. El primero es el uso de banderas (flag), y el segundo es el uso inteligente de conexiones de cadenas en el símbolo SQL&. A continuación se utilizan ejemplos para explicar el establecimiento del motor.
2. Ejemplo:
Creamos un motor de consulta de libreta de direcciones. El nombre de la base de datos es Addressbook.mdb, el nombre de la tabla es dirección y los campos son los siguientes:
ID | Nombre | Tel | Escuela |
1 | Zhang San | 33333333 | Departamento de Ciencias de la Computación, Universidad de Ciencia y Tecnología Electrónica de China |
2 | Li Si | 44444444 | Departamento de Biología, Universidad de Sichuan |
3 | Wang Er | 22222222 | Departamento de Arquitectura, Universidad Southwest Jiaotong |
… | … | … | … |
La interfaz de búsqueda web es la siguiente:
Nombre: | Teléfono: | Escuela: | Botón Buscar |
El programa fuente que utiliza el método de enumeración es el siguiente:
<%@ CODEPAGE = "936" %>
'Conectarse a la base de datos
<%
dim conn
dim DBOath
dim rs
dim sql
Set conn=Server.CreateObject("ADODB.Connection")
DBPath = Servidor .MapPath ("addressbook.mdb")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
Set rs=Server.CreateObject("ADODB.Recordset")
'Obtener el nombre y el teléfono número de la página web, el valor de la escuela
dim Name
dim Tel
dim School
Name=request("Name")
Tel=request("Tel")
School=request("School")
'El núcleo de búsqueda del método de enumeración, debido a que hay tres condiciones, se deben escribir 8 conjuntos de declaraciones de juicio
If if trim(Name)="" y trim(Tel)="" y trim(School)="" luego
sql="select * del orden de direcciones por ID asc"
finaliza si
trim(Name)= "" y trim(Tel)="" y trim(School)<>"" entonces
sql="select * de la dirección donde la escuela es como '%"&trim(School)& "%' orden por ID asc"
finaliza si
trim (Nombre)="" y trim(Tel)<>"" y trim(School)="" luego
sql="select * de la dirección donde Tel me gusta '%"&trim (Tel)&"%' ordenar por ID asc"
end if
if trim(Name)="" and trim(Tel)<>"" and trim(School)<>"" luego
sql="select * de la dirección donde Tel como '%"&trim(Tel)&"%' y Escuela como '%"&trim(Escuela)&"%' ordenar por ID asc"
end if
if trim(Nombre)<>"" y trim(Tel)="" y trim(School)="" luego
sql=" seleccione * de la dirección donde Nombre como '%"&trim(Name)&"%' orden por ID asc"
finalice si
trim(Name)<>"" y trim(Tel )="" y trim(Escuela)<>" " luego
sql="seleccione * de la dirección donde Nombre como '%"&trim(Nombre)&"%' y Escuela como '%"&trim(Escuela)&"%' orden por ID asc"
final si
trim(Nombre)< >"" y trim(Tel)<>"" y trim(Escuela)="" entonces
sql="seleccione * de la dirección donde Nombre como '%"&trim(Nombre) &"%' y Tel como '%"&trim( Tel)&"%' ordenar por ID asc"
end if
if trim(Name)<>"" and trim(Tel)<>"" and trim(School)<> "" luego
sql="seleccione * de la dirección donde Nombre como '%"&trim(Name)&"%' y Tel como '%"&trim(Tel)&"%' y Escuela como '%"&trim(School)&" %' orden por ID asc"
end if
rs.open sql,conn,1,1
'Mostrar resultados de búsqueda
si rs.eof y rs.bof luego
respuesta.write "No hay ningún registro en la libreta de direcciones actual";
de lo contrario,
hágalo mientras no rs.eof
respuesta.escribir "Nombre:"&rs("Nombre")&"Teléfono:"&rs("Tel")&"Escuela:"&rs("Escuela")&"<br>"
rs.movenext
fin del bucle
si
'Desconectar la base de datos
set rs=nada
conn.close
set conn=nada
%>
Al comprender el programa anterior, concéntrese en la parte central. Los 8 grupos de declaraciones corresponden a los 8 estados en los 3 cuadros de búsqueda uno por uno.
Nombre | Tel | Escuela |
| Vacío | |
| No |
Vacío | |
Vacío | No | Vacío |
No | | |
| | Vacío |
Además, trim() es una función de VB que elimina los espacios antes y después de la cadena de entrada; % es un comodín de varios caracteres en el lenguaje SQL (_ es un comodín de un solo carácter), por lo que se puede ver que %" &trim()&"% es muy útil para el cuadro de búsqueda. Las palabras clave ingresadas coinciden de izquierda a derecha respectivamente; en lenguaje SQL, y la conexión se usa para indicar que existe una relación "Y" entre condiciones no vacías.
Echemos un vistazo al método progresivo. En comparación con el método de enumeración, solo difieren en la parte central:
'El núcleo de búsqueda del método progresivo es juzgar si la condición está vacía o no, agréguela. a la condición de búsqueda
sql="select * from dirección donde"
if Nombre<>"" entonces
sql=sql&" Nombre como '%"&Name&"%' "
flag=1
end if
if Tel<>"" y flag=1 entonces
sql=sql&" y Tel como '%"&Tel&"% '"
flag=1
elseif Tel<>"" luego
sql=sql&" Tel como '%"&Tel&"%'"
flag=1
end if
if Company<>"" and flag=1 then
sql=sql&" and Company like ' %"&Company&"%'"
flag=1
elseif Company <>"" then
sql=sql&" Company como '%"&Company&"%'"
flag=1
end if
if flag=0 luego
sql="select * del orden de direcciones por ID asc"
finaliza si
rs.open sql,conn,1,1
El método de progresión es un algoritmo inteligente, como puede verse únicamente por la longitud de las declaraciones. La dificultad y esencia de este algoritmo radica en flag y &. En primer lugar, debe saber que & es un símbolo de concatenación de cadenas en SQL, que une los caracteres alrededor del símbolo. Regrese al programa nuevamente, cuando Nombre no esté vacío, sql="select * de la dirección donde Nombre como '%"&Name&"%' "y flag=1 siguiente, cuando Nombre no esté vacío y Tel no esté vacío, es decir; Tel<>"" y flag=1, sql="select * de la dirección donde Nombre como '%"&Name&"%' y Tel como '%"&Tel&"%' "mientras flag=1; de lo contrario, cuando el Nombre esté vacío Tel Not vacío, sql="select * de la dirección donde Tel me gusta '%"&Tel&"%' "y flag=1 y así sucesivamente, se puede ampliar para buscar con n condiciones. Por supuesto, cuando todas las condiciones están vacías, es decir, flag = 0 seleccionará todos los elementos en todas las tablas.
3. verificar:
En este punto, se establece un motor de búsqueda. A continuación se muestran algunos ejemplos de uso:
Nombre: Zhang | Teléfono: | Escuela: | Botón de búsqueda |
Los resultados de la búsqueda son:
Nombre: Zhang San Tel: 33333333 Unidad: Departamento de Ciencias de la Computación, Universidad de Ciencia y Tecnología Electrónica de China
Nombre: | Teléfono: | Escuela: | Botón de búsqueda | de universidades
Los resultados de la búsqueda son:
Nombre: Zhang San Tel: 33333333 Unidad: Departamento de Ciencias de la Computación, Universidad de Ciencia y Tecnología Electrónica de China
Nombre Li Si Tel: 44444444 Unidad: Departamento de Biología, Universidad de Sichuan
Nombre: Wang Er Tel: 22222222 Unidad: Departamento de Arquitectura, Universidad Southwest Jiaotong
Nombre: | Teléfono: 4444 | Escuela: Sichuan | Botón de búsqueda |
Los resultados de la búsqueda son:
Nombre Li Si Teléfono: 44444444 Unidad: Departamento de Biología, Universidad de Sichuan
Nombre: | Teléfono: | Escuela: Pago% | Botón de búsqueda | grande
Los resultados de la búsqueda son:
Nombre: Wang Er Teléfono: 22222222 Unidad: Departamento de Arquitectura, Universidad Southwest Jiaotong
4. mejorar:
De hecho, este motor todavía tiene algunos defectos. El problema radica principalmente en el carácter comodín %. Por un lado, esto se debe a que la gente está acostumbrada a utilizar * como carácter comodín. Por otro lado, si % aparece en un hipervínculo, % será "comido" cuando se obtenga mediante solicitud, de la siguiente manera:
--prueba.htm--
…
<a href=test.asp?content=test%the%sign>haga clic aquí</a>
…
--prueba.asp--
<%
contenido = solicitud ("contenido")
respuesta.escribir contenido
%>
Al explorar test.htm en IE, haga clic en el hipervínculo y se mostrará como:
probar el signo
Se puede ver que el hipervínculo ignora directamente %. ¿Cómo podemos solucionar este problema? Es muy simple, hacemos un pequeño truco: subvertimos la viga y cambiamos el pilar.
Agregue el siguiente código antes del núcleo de búsqueda:
Nombre=reemplazar(Nombre,"*","%")
Tel=reemplazar(Tel,"*","%")
Empresa=reemplazar(Empresa,"*","%")
Agregue el siguiente código después del núcleo de búsqueda:
Nombre=reemplazar(Nombre,"%","*")
Tel=reemplazar(Tel,"%","*")
Empresa=reemplazar(Empresa,"%","*")
Analicemos estas declaraciones. reemplazar() es una función de reemplazo de cadenas en VB reemplazar(Nombre,"*","%") es reemplazar todo * en Nombre con %. En otras palabras, reemplazamos todas las apariciones de * en las tres condiciones con %, de modo que los caracteres comodín en las primeras tres oraciones se cambien a *. Las siguientes tres oraciones pueden evitar que % sea "comido". Todos los problemas se resolverán.
Nombre: | Teléfono: | Escuela: Pago% | Botón de búsqueda | grande
Los resultados de la búsqueda son:
Nombre: Wang Er Tel: 22222222 Unidad: Departamento de Arquitectura, Universidad Southwest Jiaotong
Cambie la declaración anterior nuevamente y reemplace * con espacios. ¿No se convertiría en el motor de búsqueda que comúnmente usamos espacios para separar las condiciones de búsqueda en Google y Baidu?
Entorno de ejecución: IIS
Lenguaje de script: VBScript
Base de datos: Access/SQL Server
Lenguaje de base de datos: SQL
1. resumen:
Ya sea en sitios web dinámicos como foros, sistemas de noticias o sistemas de descarga, a menudo verá funciones de búsqueda: buscar publicaciones, buscar usuarios, buscar software (en resumen, buscar palabras clave), etc. Este artículo presenta cómo crear un Búsqueda práctica y eficiente de valores múltiples en sitios basados en ASP.
Este artículo trata sobre la "búsqueda de coincidencia difusa de múltiples condiciones". Después de comprender múltiples condiciones, la búsqueda de una sola condición es pan comido. En términos generales, existen dos métodos para la búsqueda de múltiples condiciones: método de enumeración y método progresivo. Cuando no hay demasiadas condiciones de búsqueda ( n <= 3), se puede utilizar el método de enumeración. La frecuencia de las declaraciones es 2 elevado a la enésima potencia y n es el número de condición. Obviamente, cuando aumenta el número de condiciones, se debe adoptar el método progresivo independientemente de la eficiencia o realizabilidad del programa. La frecuencia de declaración es n y crece linealmente. Cabe señalar que la idea del método de enumeración es muy simple: determina si las condiciones están vacías una por una y luego busca de acuerdo con las condiciones no vacías. Al mismo tiempo, puede utilizar la tecnología de tabla de verdad. se utiliza para lidiar con situaciones con muchísimas condiciones (creo que nadie hará este tipo de cosas), cuando hay 4 condiciones, hay que escribir 16 grupos de declaraciones); el método progresivo es más ingenioso y se centra en la comprensión. El primero es el uso de banderas (flag), y el segundo es el uso inteligente de conexiones de cadenas en el símbolo SQL&. A continuación se utilizan ejemplos para explicar el establecimiento del motor.
2. Ejemplo:
Creamos un motor de consulta de libreta de direcciones. El nombre de la base de datos es Addressbook.mdb, el nombre de la tabla es dirección y los campos son los siguientes:
ID | Nombre | Tel | Escuela |
1 | Zhang San | 33333333 | Departamento de Ciencias de la Computación, Universidad de Ciencia y Tecnología Electrónica de China |
2 | Li Si | 44444444 | Departamento de Biología, Universidad de Sichuan |
3 | Wang Er | 22222222 | Departamento de Arquitectura, Universidad Southwest Jiaotong |
… | … | … | … |
La interfaz de búsqueda web es la siguiente:
Nombre: | Teléfono: | Escuela: | Botón Buscar |
El programa fuente que utiliza el método de enumeración es el siguiente:
<%@ CODEPAGE = "936" %>
'Conectarse a la base de datos
<%
dim conn
dim DBOath
dim rs
dim sql
Set conn=Server.CreateObject("ADODB.Connection")
DBPath = Servidor .MapPath ("addressbook.mdb")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
Set rs=Server.CreateObject("ADODB.Recordset")
'Obtener el nombre y el teléfono número de la página web, el valor de la escuela
dim Name
dim Tel
dim School
Name=request("Name")
Tel=request("Tel")
School=request("School")
'El núcleo de búsqueda del método de enumeración, debido a que hay tres condiciones, se deben escribir 8 conjuntos de declaraciones de juicio
If if trim(Name)="" y trim(Tel)="" y trim(School)="" luego
sql="select * del orden de direcciones por ID asc"
finaliza si
trim(Name)= "" y trim(Tel)="" y trim(School)<>"" entonces
sql="select * de la dirección donde la escuela es como '%"&trim(School)& "%' orden por ID asc"
finaliza si
trim (Nombre)="" y trim(Tel)<>"" y trim(School)="" luego
sql="select * de la dirección donde Tel me gusta '%"&trim (Tel)&"%' ordenar por ID asc"
end if
if trim(Name)="" and trim(Tel)<>"" and trim(School)<>"" luego
sql="select * de la dirección donde Tel como '%"&trim(Tel)&"%' y Escuela como '%"&trim(Escuela)&"%' ordenar por ID asc"
end if
if trim(Nombre)<>"" y trim(Tel)="" y trim(School)="" luego
sql=" seleccione * de la dirección donde Nombre como '%"&trim(Name)&"%' orden por ID asc"
finalice si
trim(Name)<>"" y trim(Tel )="" y trim(Escuela)<>" " luego
sql="seleccione * de la dirección donde Nombre como '%"&trim(Nombre)&"%' y Escuela como '%"&trim(Escuela)&"%' orden por ID asc"
final si
trim(Nombre)< >"" y trim(Tel)<>"" y trim(Escuela)="" entonces
sql="seleccione * de la dirección donde Nombre como '%"&trim(Nombre) &"%' y Tel como '%"&trim( Tel)&"%' ordenar por ID asc"
end if
if trim(Name)<>"" and trim(Tel)<>"" and trim(School)<> "" luego
sql="seleccione * de la dirección donde Nombre como '%"&trim(Name)&"%' y Tel como '%"&trim(Tel)&"%' y Escuela como '%"&trim(School)&" %' orden por ID asc"
end if
rs.open sql,conn,1,1
'Mostrar resultados de búsqueda
si rs.eof y rs.bof luego
respuesta.write "No hay ningún registro en la libreta de direcciones actual";
de lo contrario,
hágalo mientras no rs.eof
respuesta.escribir "Nombre:"&rs("Nombre")&"Teléfono:"&rs("Tel")&"Escuela:"&rs("Escuela")&"<br>"
rs.movenext
fin del bucle
si
'Desconectar la base de datos
set rs=nada
conn.close
set conn=nada
%>
Al comprender el programa anterior, concéntrese en la parte central. Los 8 grupos de declaraciones corresponden a los 8 estados en los 3 cuadros de búsqueda uno por uno.
Nombre | Tel | Escuela |
| Vacío | |
| No |
Vacío | |
Vacío | No | Vacío |
No | | |
| | Vacío |
Además, trim() es una función de VB que elimina los espacios antes y después de la cadena de entrada; % es un comodín de varios caracteres en el lenguaje SQL (_ es un comodín de un solo carácter), por lo que se puede ver que %" &trim()&"% es muy útil para el cuadro de búsqueda. Las palabras clave ingresadas coinciden de izquierda a derecha respectivamente; en lenguaje SQL, y la conexión se usa para indicar que existe una relación "Y" entre condiciones no vacías.
Echemos un vistazo al método progresivo. En comparación con el método de enumeración, solo difieren en la parte central:
'El núcleo de búsqueda del método progresivo es juzgar si la condición está vacía o no, agréguela. a la condición de búsqueda
sql="select * from dirección donde"
if Nombre<>"" entonces
sql=sql&" Nombre como '%"&Name&"%' "
flag=1
end if
if Tel<>"" y flag=1 entonces
sql=sql&" y Tel como '%"&Tel&"% '"
flag=1
elseif Tel<>"" luego
sql=sql&" Tel como '%"&Tel&"%'"
flag=1
end if
if Company<>"" and flag=1 then
sql=sql&" and Company like ' %"&Company&"%'"
flag=1
elseif Company <>"" then
sql=sql&" Company como '%"&Company&"%'"
flag=1
end if
if flag=0 luego
sql="select * del orden de direcciones por ID asc"
finaliza si
rs.open sql,conn,1,1
El método de progresión es un algoritmo inteligente, como puede verse únicamente por la longitud de las declaraciones. La dificultad y esencia de este algoritmo radica en flag y &. En primer lugar, debe saber que & es un símbolo de concatenación de cadenas en SQL, que une los caracteres alrededor del símbolo. Regrese al programa nuevamente, cuando Nombre no esté vacío, sql="select * de la dirección donde Nombre como '%"&Name&"%' "y flag=1 siguiente, cuando Nombre no esté vacío y Tel no esté vacío, es decir; Tel<>"" y flag=1, sql="select * de la dirección donde Nombre como '%"&Name&"%' y Tel como '%"&Tel&"%' "mientras flag=1; de lo contrario, cuando el Nombre esté vacío Tel Not vacío, sql="select * de la dirección donde Tel me gusta '%"&Tel&"%' "y flag=1 y así sucesivamente, se puede extender para buscar con n condiciones. Por supuesto, cuando todas las condiciones están vacías, es decir, flag = 0 seleccionará todos los elementos en todas las tablas.
3. verificar:
En este punto, se establece un motor de búsqueda. A continuación se muestran algunos ejemplos de uso:
Nombre: Zhang | Teléfono: | Escuela: | Botón de búsqueda |
Los resultados de la búsqueda son:
Nombre: Zhang San Tel: 33333333 Unidad: Departamento de Ciencias de la Computación, Universidad de Ciencia y Tecnología Electrónica de China
Nombre: | Teléfono: | Escuela: | Botón de búsqueda | de universidades
Los resultados de la búsqueda son:
Nombre: Zhang San Tel: 33333333 Unidad: Departamento de Ciencias de la Computación, Universidad de Ciencia y Tecnología Electrónica de China
Nombre Li Si Tel: 44444444 Unidad: Departamento de Biología, Universidad de Sichuan
Nombre: Wang Er Tel: 22222222 Unidad: Departamento de Arquitectura, Universidad Southwest Jiaotong
Nombre: | Teléfono: 4444 | Escuela: Sichuan | Botón de búsqueda |
Los resultados de la búsqueda son:
Nombre Li Si Teléfono: 44444444 Unidad: Departamento de Biología, Universidad de Sichuan
Nombre: | Teléfono: | Escuela: Pago% | Botón de búsqueda | grande
Los resultados de la búsqueda son:
Nombre: Wang Er Teléfono: 22222222 Unidad: Departamento de Arquitectura, Universidad Southwest Jiaotong
4. mejorar:
De hecho, este motor todavía tiene algunos defectos. El problema radica principalmente en el carácter comodín %. Por un lado, esto se debe a que la gente está acostumbrada a utilizar * como carácter comodín. Por otro lado, si % aparece en un hipervínculo, % será "comido" cuando se obtenga mediante solicitud, de la siguiente manera:
--prueba.htm--
…
<a href=test.asp?content=test%the%sign>haga clic aquí</a>
…
--prueba.asp--
<%
contenido = solicitud ("contenido")
respuesta.escribir contenido
%>
Al explorar test.htm en IE, haga clic en el hipervínculo y se mostrará como:
probar el signo
Se puede ver que el hipervínculo ignora directamente %. ¿Cómo podemos solucionar este problema? Es muy simple, hacemos un pequeño truco: subvertimos la viga y cambiamos el pilar.
Agregue el siguiente código antes del núcleo de búsqueda:
Nombre=reemplazar(Nombre,"*","%")
Tel=reemplazar(Tel,"*","%")
Empresa=reemplazar(Empresa,"*","%")
Agregue el siguiente código después del núcleo de búsqueda:
Nombre=reemplazar(Nombre,"%","*")
Tel=reemplazar(Tel,"%","*")
Empresa=reemplazar(Empresa,"%","*")
Analicemos estas declaraciones. reemplazar() es una función de reemplazo de cadenas en VB reemplazar(Nombre,"*","%") es reemplazar todo * en Nombre con %. En otras palabras, reemplazamos todas las apariciones de * en las tres condiciones con %, de modo que los caracteres comodín en las primeras tres oraciones se cambien a *. Las siguientes tres oraciones pueden evitar que % sea "comido". Todos los problemas se resolverán.
Nombre: | Teléfono: | Escuela: Pago% | Botón de búsqueda | grande
Los resultados de la búsqueda son:
Nombre: Wang Er Tel: 22222222 Unidad: Departamento de Arquitectura, Universidad Southwest Jiaotong
Cambie la declaración anterior nuevamente y reemplace * con espacios. ¿No se convertiría en el motor de búsqueda que comúnmente usamos espacios para separar las condiciones de búsqueda en Google y Baidu?