Ambiente de corrida: IIS
Idioma do script: vbscript
Banco de dados: Access/SQL Server
Idioma do banco de dados: SQL
1. resumo:
Independentemente de sites dinâmicos, como o fórum, o sistema de notícias ou o sistema de download, todos costumam ver a função de pesquisa: pesquisar postagens, usuários de pesquisa, software de pesquisa (em palavras -chave de pesquisa curta), etc. Este artigo apresenta como estabelecer um eficiente Eficiência Prática, Pesquise a pesquisa em vários valores com base no ASP.
Este artigo está enfrentando várias condições e a vaga pesquisa de correspondência, que entende multi -condição, e uma única pesquisa de condição não é um pedaço de bolo. De um modo geral, existem duas maneiras de procurar várias condições: enumeração e métodos progressivos. A condição de pesquisa não é muito longa (n <= 3) e o método de enumeração pode ser usado. Obviamente, quando as condições são aumentadas, o método de progresso deve ser adotado em ambos os procedimentos e pode ser alcançado. Deve -se ressaltar que o método de enumeração é muito simples, se a condição do julgamento está vazia e, em seguida, pesquisada de acordo com condições não vazias. Com muitas condições (acredito que ninguém vai fazer esse tipo de coisa em 4 condições, já temos que escrever 16 conjuntos de frases); Esse deve usar a posição do logotipo (sinalizador) e o segundo é usar a string na conexão SQL String. Vamos explicar o estabelecimento do motor pelo exemplo.
2. Exemplo:
Estabelecemos um mecanismo de consulta de livros de endereços.
Id Nome Tel School
1 Três 333333333 Universidade de Ciência Eletrônica e Tecnologia da Universidade de Ciência e Tecnologia Eletrônica
2 LI 444444444 Departamento de Biologia da Universidade de Sichuan
3 Wang 222222222 Sudoeste do Departamento de Arquitetura da Universidade de Jiaotong
... ... ... ...
A interface de pesquisa da web é a seguinte:
Nome: Tel: Escola: Botão de Pesquisa
O procedimento de origem do método de enumeração é o seguinte:
< %@ CodePage = 936 %>
'Banco de dados de conexão
<%
Dim Conn
Dim dboath
Dim Rs
Dim SQL
Definir Conn = Server.CreateObject (Adodb.Connection)
Dbpath = server.mappath (endereço de endereço.mdb)
Conn.open driver = {Microsoft Access Driver (*.mdb)};
Set rs = server.createObject (adodb.oldset)
'Obtenha o nome, telefone, valor da escola na página da web
Dim nome
Dim Tel
Dim Schol
Nome = solicitação (nome)
Tel = solicitação (Tel)
Escola = Solicitação (escola)
'O núcleo do método de enumeração, porque existem 3 condições, você precisa escrever 8 grupos de declarações de julgamento
Se Trim (nome) = e Trim (tel) = e Trim (escola) = então
Sql = selecione * da ordem de endereço por id ASC
final se
Se Trim (nome) = e Trim (tel) = e Trim (escola) <> então
Sql = selecione * do endereço onde a escola como '%& Trim (escola) e%Ordem por id ASC
final se
Se Trim (nome) = e Trim (tel) <> e Trim (escola) = então
Sql = selecione * do endereço onde Tel Like '%& Trim (Tel) &%' Order by Id ASC
final se
Se Trim (nome) = e Trim (tel) <> e Trim (escola) <> então
Sql = selecione * do endereço onde Tel Like '%& Trim (Tel) &%' e Escola como '%& Trim (Escola) e%Ordem por ID ASC
final se
Se Trim (nome) <> e Trim (tel) = e Trim (escola) = então
Sql = selecione * do endereço onde o nome como '%& Trim (nome) &%' Order by id ASC
final se
Se Trim (nome) <> e Trim (tel) = e Trim (escola) <> então
Sql = selecione * do endereço onde nome como '%& Trim (nome) &%' e escola como '%& Trim (escola) e%' Ordem por id ASC
final se
Se Trim (nome) <> e Trim (tel) <> e Trim (escola) = então
Sql = selecione * do endereço onde o nome como '%& Trim (nome) &%' e Tel Like '%& Trim (Tel) &%' Order by ID ASC
final se
Se Trim (nome) <> e Trim (tel) <> e Trim (escola) <> então
Sql = selecione * do endereço onde o nome como '%& Trim (nome) &%' e Tel Like '%& Trim (Tel) &%' e School como '%& Trim (Escola) e%Ordem por ad sc
final se
Rs.ooopen SQL, Conn, 1,1
'Mostrar resultados de pesquisa
Se Rs.eof e Rs.Bof então
Response.Write não registra no livro de endereços atualmente
outro
Faça enquanto não é Rs.eof
Response.Write Nome: & Rs (Nome) & Tel: & Rs (Tel) e Escola: & RS (Escola) & <br>
rs.movenext
laço
final se
'Quebre o banco de dados
Definir rs = nada
Conn.Close
defina conn = nada
%>
Ao entender os procedimentos acima, concentre
Nome Tel School
Vazio
Vazio e vazio
Vazio e vazio
Vazio não vazio
Não vazio
Não vazio
Não vazio
Não vazio não vazio
Além disso, Trim () é uma função do VB, remova o espaço antes e depois da sequência de entrada;%é a passagem multi -carregadora da linguagem SQL (_ é um único passe de caractere), que mostra que%& Trim () e%entrada na entrada da caixa de pesquisa As palavras -chave são correspondentes à esquerda e à direita;
Vamos dar uma olhada no método de progresso.
'O núcleo do método de pesquisa, a condição de julgamento está vazia e o não vazio o adicionará à condição de pesquisa
Sql = selecione * do endereço onde
Se nome <> então
Sql = sql e nome como '%& name &%'
Sinalizador = 1
final se
se tel <> e sinalizador = 1 o
SQL = SQL & e Tel Like '%& Tel &%'
Sinalizador = 1
Elseif Tel <> então
SQL = SQL & Tel Like '%& Tel &%'
Sinalizador = 1
final se
Se empresa <> e sinalizador = 1 então
SQL = SQL & e Companhia como '%& Company &%'
Sinalizador = 1
Elseif Company <> então
SQL = SQL & Company como '%& Company &%'
Sinalizador = 1
final se
Se sinalizador = 0 então
Sql = selecione * da ordem de endereço por id ASC
final se
Rs.ooopen SQL, Conn, 1,1
O método de progresso é um algoritmo sábio, que pode ser visto sozinho a partir da duração da declaração. A dificuldade e a essência deste algoritmo estão na bandeira e &. Primeiro de tudo, você deve ser claro e no SQL é um símbolo de conexão de string, costurando os caracteres ao redor do símbolo. Voltar ao programa, quando o nome não está vazio, sql = selecione * do endereço onde o nome '%& Name &%' sinaliza simultaneamente = 1; Tel = Selecione * do endereço w aqui Tel Like '%& Tel &%' no mesmo horário sinalizador = 1; Obviamente, quando as condições estiverem vazias, ou seja, sinalizador = 0 selecionará todos os itens da tabela.
3. verificar:
Neste ponto, um mecanismo de pesquisa é estabelecido. Aqui estão alguns exemplos de uso:
Nome: Zhang Tel: Escola: Botão de pesquisa
Os resultados da pesquisa são:
Nome: Zhang San Tel: 33333333 Unidade: Departamento de Computação da Universidade da Universidade de Ciência e Tecnologia Eletrônica
Nome: Tel: Escola: Botão de Pesquisa da Universidade
Os resultados da pesquisa são:
Nome: Zhang San Tel: 33333333 Unidade: Departamento de Computação da Universidade da Universidade de Ciência e Tecnologia Eletrônica
Nome Li Si Tel: 44444444 Unidade: Departamento de Biologia da Universidade de Sichuan
Nome: Wang Er Tel: 22222222 Unidade: Departamento de Arquitetura, Universidade do Sudoeste de Jiaotong
Nome: Tel: 4444 Escola: Botão de Pesquisa Sichuan
Os resultados da pesquisa são:
Nome Li Si Tel: 44444444 Unidade: Departamento de Biologia da Universidade de Sichuan
Nome: Telefone: Escola: Botão de Pesquisa de Pay%
Os resultados da pesquisa são:
Nome: Wang Er Tel: 22222222 Unidade: Departamento de Arquitetura, Universidade do Sudoeste de Jiaotong
4. melhorar:
De fato, esse mecanismo ainda tem alguns defeitos. Por um lado, é porque as pessoas geralmente usam*como um canal e, por outro lado, se aparecer no hiperlink, será consumido ao obtê -lo através da solicitação, como segue:
--Test.htm--
Cortando
<A href = test.asp?
Cortando
--Test.asp--
<%
Content = Solicitação (Conteúdo)
Response.Write Content
%>
Quando você navegar no teste.htm no IE, clique no hiperlink e ele é exibido como:
TestThesign
Pode -se observar que%é diretamente ignorado pelo hiperlink. Como podemos resolver esse problema? É muito simples, vamos fazer um pouco de vigas e colunas que roubam pés e alterações.
Adicione o seguinte código antes do núcleo de pesquisa:
Nome = substituir (nome,*,%)
Tel = substituir (tel,*,%)
Empresa = Substitua (Empresa,*,%)
Adicione o seguinte código ao núcleo da pesquisa:
Nome = substituir (nome,%,*)
Tel = substituir (tel,%,*)
Empresa = Substitua (Empresa,%,*)
Vamos analisar essas frases. Substituir () é uma função de substituição de string no VB. Em outras palavras, substituímos todas as três condições das três condições para%, para que as três primeiras frases sejam alteradas para*. As últimas três frases podem impedir que%sejam comidas. Todos os problemas serão resolvidos.
Nome: Telefone: Escola: Botão de Pesquisa de Pay%
Os resultados da pesquisa são:
Nome: Wang Er Tel: 22222222 Unidade: Departamento de Arquitetura, Universidade do Sudoeste de Jiaotong
Altere as instruções acima e substitua*pela grade vazia.
Função suplementar: se quisermos consultar o título e o conteúdo na mesma tabela, mas queremos organizá -los na ordem desses dois, como descobrir a primeira tela que atende ao título, como ele pode ser realizado por trás do título? Interseção
Sql = selecione * do produto onde tite como '%& keyword &%'
SQL = SQL + Union Selecione * do produto onde conteúdo como '%& Keyword &%Order By Id Desc
Adicione um no meio das duas declarações SQL, e a união pode ser investigada em combinação, mas a coluna deve ser a mesma e também há uma.
Usaremos as consultas conjuntas da Union, que alcançarão as funções acima.
Análise: A consulta do banco de dados será consultada de acordo com os dados com o título e, em seguida, a realização da consulta de dados do conteúdo é dividida.