Environnement d'exécution : IIS
Langage de script : VBScript
Base de données : Access/SQL Server
Langage de la base de données : SQL
1. résumé:
Que ce soit dans les sites Web dynamiques tels que les forums, les systèmes d'actualités ou les systèmes de téléchargement, vous voyez souvent des fonctions de recherche : recherche de publications, recherche d'utilisateurs, recherche de logiciels (en bref, recherche de mots-clés), etc. Cet article présente comment construire un Recherche multi-valeurs de site pratique et efficace basée sur ASP.
Cet article traite de la « recherche de correspondance floue multi-conditions ». Après avoir compris plusieurs conditions, la recherche à condition unique n'est qu'un jeu d'enfant. De manière générale, il existe deux méthodes de recherche multi-conditions : la méthode d'énumération et la méthode progressive. Lorsqu'il n'y a pas trop de conditions de recherche ( n <=3), la méthode d'énumération peut être utilisée. La fréquence des instructions est de 2 à la puissance n , augmentant de façon exponentielle n est le numéro de condition. Évidemment, lorsque le nombre de conditions augmente, la méthode progressive doit être adoptée quelle que soit l’efficacité ou la réalisabilité du programme. La fréquence des déclarations est n et croît linéairement. Il convient de souligner que l'idée de la méthode d'énumération est très simple. Elle détermine si les conditions sont vides une par une, puis recherche selon les conditions non vides. En même temps, la technologie des tables de vérité peut le faire. être utilisé pour traiter des situations avec extrêmement de conditions (je crois que personne ne fera ce genre de chose), quand il y a 4 conditions, il faut écrire 16 groupes d'énoncés) ; la méthode progressive est plus ingénieuse, axée sur la compréhension) ; Le premier est l'utilisation de drapeaux (flag), et le second est l'utilisation intelligente des connexions de chaînes dans le symbole SQL&. Ce qui suit utilise des exemples pour expliquer la création du moteur.
2. Exemple:
Nous construisons un moteur de requête de carnet d'adresses. Le nom de la base de données est Addressbook.mdb, le nom de la table est Address et les champs sont les suivants :
ID | Nom | Tél. | École |
1 | Zhang San | 33333333 | Département d'informatique, Université des sciences et technologies électroniques de Chine |
2 | Li Si | 44444444 | Département de biologie, Université du Sichuan |
3 | Wang Er | 22222222 | Département d'architecture, Université Jiaotong du Sud-Ouest |
… | … | … | … |
L'interface de recherche Web est la suivante :
Nom : | Téléphone : | École : | Bouton de recherche |
Le programme source utilisant la méthode d'énumération est le suivant :
<%@ CODEPAGE = "936" %>
'Connectez-vous à la base de données
<%
dim conn
dim DBOath
dim rs
dim sql
Set conn=Server.CreateObject("ADODB.Connection")
DBPath = Server .MapPath ("addressbook.mdb")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
Set rs=Server.CreateObject("ADODB.Recordset")
'Obtenir le nom et le téléphone numéro de la page Web, la valeur de l'école
dim Name
dim Tel
dim School
Name=request("Name")
Tel=request("Tel")
School=request("School")
'Le noyau de recherche de la méthode d'énumération, car il y a trois conditions, il faut donc écrire 8 ensembles d'instructions de jugement
If if trim(Name)="" et trim(Tel)="" et trim(School)="" then
sql="select * from address order par ID asc"
end if
if trim(Name)= "" et trim(Tel)="" et trim(School)<>"" then
sql="select * from address which School like '%"&trim(School)& "%' order by ID asc"
end if
if trim (Name)="" et trim(Tel)<>"" et trim(School)="" then
sql="select * from address which Tel like '%"&trim (Tel)&"%' order by ID asc"
end if
if trim(Name)="" et trim(Tel)<>"" et trim(School)<>"" then
sql="select * from address which Tel comme '%"&trim(Tel)&"%' et School comme '%"&trim(School)&"%' ordre par ID asc"
end if
if trim(Name)<>"" et trim(Tel)="" et trim(School)="" then
sql=" select * from address which Name like '%"&trim(Name)&"%' order by ID asc"
end if
if trim(Name)<>"" et trim(Tel )="" et trim(School)<>" " puis
sql="select * from address où Name like '%"&trim(Name)&"%' et School like '%"&trim(School)&"%' order par ID asc"
end if
if trim(Name)< >"" et trim(Tel)<>"" et trim(School)="" then
sql="select * from address which Name like '%"&trim(Name) &"%' et Tel comme '%"&trim( Tel)&"%' commander par ID asc"
end if
if trim(Name)<>"" et trim(Tel)<>"" et trim(School)<> "" then
sql="select * from address which Name like '%"&trim(Name)&"%' et Tel like '%"&trim(Tel)&"%' et School like '%"&trim(School)&" %' order by ID asc"
end if
rs.open sql,conn,1,1
'Afficher les résultats de la recherche
si rs.eof et rs.bof then
réponse.write "Il n'y a aucun enregistrement dans le carnet d'adresses actuel"
sinon
faites-le sans le faire rs.eof
réponse.write "Nom :"&rs("Nom" )&"Téléphone :"&rs("Tel")&"École :"&rs("École")&"<br>"
rs.movenext
fin de boucle
si
'Déconnectez la base de données
set rs=nothing
conn.close
set conn=nothing
%>
Lors de la compréhension du programme ci-dessus, concentrez-vous sur la partie centrale. Les 8 groupes d'énoncés correspondent aux 8 états dans les 3 champs de recherche un par un.
Nom | Tél | . | Ecole
| | Vide | Vide | Non |
Vide | |
| |
Vide | |
Vide | |
| Vide |
Vide |
De plus, trim() est une fonction VB qui supprime les espaces avant et après la chaîne d'entrée ; % est un caractère générique à plusieurs caractères dans le langage SQL (_ est un caractère générique à un seul caractère), on peut donc voir que %" &trim()&"% est très utile pour le champ de recherche. Les mots-clés saisis correspondent respectivement de gauche à droite ; en langage SQL, et la connexion est utilisée pour indiquer qu'il existe une relation "ET" entre des conditions non vides.
Jetons un coup d'œil à la méthode progressive. Par rapport à la méthode d'énumération, elles ne diffèrent que par la partie centrale :
« Le noyau de recherche de la méthode progressive est de juger si la condition est vide ou non. Si elle n'est pas vide, ajoutez-la. à la condition de recherche
sql="select * from address which"
if Name<>"" then
sql=sql&" Name like '%"&Name&"%' "
flag=1
end if
if Tel<>"" et flag=1 then
sql=sql&" et Tel comme '%"&Tel&"% '"
flag=1
elseif Tel<>"" then
sql=sql&" Tel comme '%"&Tel&"%'"
flag=1
end if
if Company<>"" et flag=1 puis
sql=sql&" et société comme ' %"&Company&"%'"
flag=1
elseif Company <>"" then
sql=sql&" Société comme '%"&Company&"%'"
flag=1
end if
if flag=0 then
sql="select * from address order by ID asc"
end if
rs.open sql,conn,1,1
La méthode de progression est un algorithme intelligent, comme le montre la seule longueur des instructions. La difficulté et l'essence de cet algorithme résident dans le drapeau et le &. Tout d'abord, vous devez savoir que & est un symbole de concaténation de chaînes dans SQL, qui fusionne les caractères autour du symbole. Revenons au programme, lorsque Name n'est pas vide, sql="select * from address which Name like '%"&Name&"%' " ensuite, lorsque Name n'est pas vide et Tel n'est pas vide, c'est-à-dire Tel<>"" et flag=1, sql="select * from address où Name like '%"&Name&"%' et Tel like '%"&Tel&"%' " while flag=1, sinon lorsque Name est vide Tel Not vide, sql="select * from address which Tel like '%"&Tel&"%' "et flag=1 et ainsi de suite, il peut être étendu pour rechercher avec n conditions ; Bien sûr, lorsque les conditions sont toutes vides, c'est-à-dire que flag=0 sélectionnera tous les éléments de toutes les tables.
3. vérifier:
À ce stade, un moteur de recherche est mis en place. Voici quelques exemples d'utilisation :
Nom : Zhang | Téléphone : | École : | Bouton de recherche |
Les résultats de la recherche sont :
Nom : Zhang San Tél. : 33333333 Unité : Département d'informatique, Université des sciences et technologies électroniques de Chine
Nom : | Téléphone : | École : Collège | Bouton de recherche |
Les résultats de la recherche sont :
Nom : Zhang San Tél. : 33333333 Unité : Département d'informatique, Université des sciences et technologies électroniques de Chine
Nom Li Si Tél. : 44444444 Unité : Département de biologie, Université du Sichuan
Nom : Wang Er Tél. : 22222222 Unité : Département d'architecture, Université Jiaotong du Sud-Ouest
Nom : | Téléphone : 4444 | École : Sichuan | Bouton de recherche |
Les résultats de la recherche sont :
Nom Li Si Téléphone : 44444444 Unité : Département de biologie, Université du Sichuan
Nom : | Téléphone : | École : Pay% Gros | bouton de recherche |
Les résultats de la recherche sont :
Nom : Wang Er Téléphone : 22222222 Unité : Département d'architecture, Université Jiaotong du Sud-Ouest
4. améliorer:
En fait, ce moteur présente encore quelques défauts. Le problème réside principalement dans le caractère générique %. D'une part, cela est dû au fait que les gens sont habitués à utiliser * comme caractère générique. D'autre part, si % apparaît dans un lien hypertexte, % sera « mangé » lorsqu'il est obtenu via une demande, comme suit :
--test.htm--
…
<a href=test.asp?content=test%the%sign>cliquez ici</a>
…
--test.asp--
<%
contenu=requête("contenu")
réponse.écrire le contenu
%>
Lorsque vous parcourez test.htm dans IE, cliquez sur le lien hypertexte et il s'affichera comme suit :
tester la conception
On voit que % est directement ignoré par le lien hypertexte. Comment pouvons-nous résoudre ce problème ? C'est très simple, on fait un petit truc : renverser la poutre et changer le pilier.
Ajoutez le code suivant avant le noyau de recherche :
Nom=remplacer(Nom,"*","%")
Tél=remplacer(Tél,"*","%")
Entreprise=remplacer(Entreprise,"*","%")
Ajoutez le code suivant après le noyau de recherche :
Nom=remplacer(Nom,"%","*")
Tél=remplacer(Tél,"%","*")
Entreprise=remplacer(Entreprise,"%","*")
Analysons ces déclarations. replace() est une fonction de remplacement de chaîne en VB. replace(Name,"*","%") consiste à remplacer tous les * dans Name par %. En d’autres termes, nous remplaçons toutes les occurrences de * dans les trois conditions par %, de sorte que les caractères génériques des trois premières phrases soient remplacés par *. Les trois phrases suivantes peuvent empêcher % d'être « mangé ». Tous les problèmes seront résolus.
Nom : | Téléphone : | École : Pay% Gros | bouton de recherche |
Les résultats de la recherche sont :
Nom : Wang Er Tél. : 22222222 Unité : Département d'architecture, Université Jiaotong du Sud-Ouest
Modifiez à nouveau l'instruction ci-dessus et remplacez * par des espaces. Ne deviendrait-il pas le moteur de recherche que nous utilisons couramment des espaces pour séparer les conditions de recherche dans Google et Baidu ?
Environnement d'exécution : IIS
Langage de script : VBScript
Base de données : Access/SQL Server
Langage de la base de données : SQL
1. résumé:
Que ce soit dans les sites Web dynamiques tels que les forums, les systèmes d'actualités ou les systèmes de téléchargement, vous voyez souvent des fonctions de recherche : recherche de publications, recherche d'utilisateurs, recherche de logiciels (en bref, recherche de mots-clés), etc. Cet article présente comment construire un Recherche multi-valeurs de site pratique et efficace basée sur ASP.
Cet article traite de la « recherche de correspondance floue multi-conditions ». Après avoir compris plusieurs conditions, la recherche à condition unique n'est qu'un jeu d'enfant. De manière générale, il existe deux méthodes de recherche multi-conditions : la méthode d'énumération et la méthode progressive. Lorsqu'il n'y a pas trop de conditions de recherche ( n <=3), la méthode d'énumération peut être utilisée. La fréquence des instructions est de 2 à la puissance n , augmentant de façon exponentielle n est le numéro de condition. Évidemment, lorsque le nombre de conditions augmente, la méthode progressive doit être adoptée quelle que soit l’efficacité ou la réalisabilité du programme. La fréquence des déclarations est n et croît linéairement. Il convient de souligner que l'idée de la méthode d'énumération est très simple. Elle détermine si les conditions sont vides une par une, puis recherche selon les conditions non vides. En même temps, la technologie des tables de vérité peut le faire. être utilisé pour traiter des situations avec extrêmement de conditions (je crois que personne ne fera ce genre de chose), quand il y a 4 conditions, il faut écrire 16 groupes d'énoncés) ; la méthode progressive est plus ingénieuse, axée sur la compréhension) ; Le premier est l'utilisation de drapeaux (flag), et le second est l'utilisation intelligente des connexions de chaînes dans le symbole SQL&. Ce qui suit utilise des exemples pour expliquer la création du moteur.
2. Exemple:
Nous construisons un moteur de requête de carnet d'adresses. Le nom de la base de données est Addressbook.mdb, le nom de la table est Address et les champs sont les suivants :
ID | Nom | Tél. | École |
1 | Zhang San | 33333333 | Département d'informatique, Université des sciences et technologies électroniques de Chine |
2 | Li Si | 44444444 | Département de biologie, Université du Sichuan |
3 | Wang Er | 22222222 | Département d'architecture, Université Jiaotong du Sud-Ouest |
… | … | … | … |
L'interface de recherche Web est la suivante :
Nom : | Téléphone : | École : | Bouton de recherche |
Le programme source utilisant la méthode d'énumération est le suivant :
<%@ CODEPAGE = "936" %>
'Connectez-vous à la base de données
<%
dim conn
dim DBOath
dim rs
dim sql
Set conn=Server.CreateObject("ADODB.Connection")
DBPath = Server .MapPath ("addressbook.mdb")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
Set rs=Server.CreateObject("ADODB.Recordset")
'Obtenir le nom et le téléphone numéro de la page Web, la valeur de l'école
dim Name
dim Tel
dim School
Name=request("Name")
Tel=request("Tel")
School=request("School")
'Le noyau de recherche de la méthode d'énumération, car il y a trois conditions, il faut donc écrire 8 ensembles d'instructions de jugement
If if trim(Name)="" et trim(Tel)="" et trim(School)="" then
sql="select * from address order par ID asc"
end if
if trim(Name)= "" et trim(Tel)="" et trim(School)<>"" then
sql="select * from address which School like '%"&trim(School)& "%' order by ID asc"
end if
if trim (Name)="" et trim(Tel)<>"" et trim(School)="" then
sql="select * from address which Tel like '%"&trim (Tel)&"%' order by ID asc"
end if
if trim(Name)="" et trim(Tel)<>"" et trim(School)<>"" then
sql="select * from address which Tel comme '%"&trim(Tel)&"%' et School comme '%"&trim(School)&"%' ordre par ID asc"
end if
if trim(Name)<>"" et trim(Tel)="" et trim(School)="" then
sql=" select * from address which Name like '%"&trim(Name)&"%' order by ID asc"
end if
if trim(Name)<>"" et trim(Tel )="" et trim(School)<>" " puis
sql="select * from address où Name like '%"&trim(Name)&"%' et School like '%"&trim(School)&"%' order par ID asc"
end if
if trim(Name)< >"" et trim(Tel)<>"" et trim(School)="" then
sql="select * from address which Name like '%"&trim(Name) &"%' et Tel comme '%"&trim( Tel)&"%' commander par ID asc"
end if
if trim(Name)<>"" et trim(Tel)<>"" et trim(School)<> "" then
sql="select * from address which Name like '%"&trim(Name)&"%' et Tel like '%"&trim(Tel)&"%' et School like '%"&trim(School)&" %' order by ID asc"
end if
rs.open sql,conn,1,1
'Afficher les résultats de la recherche
si rs.eof et rs.bof then
réponse.write "Il n'y a aucun enregistrement dans le carnet d'adresses actuel"
sinon
faites-le sans le faire rs.eof
réponse.write "Nom :"&rs("Nom" )&"Téléphone :"&rs("Tel")&"École :"&rs("École")&"<br>"
rs.movenext
fin de boucle
si
'Déconnectez la base de données
set rs=nothing
conn.close
set conn=nothing
%>
Lors de la compréhension du programme ci-dessus, concentrez-vous sur la partie centrale. Les 8 groupes d'énoncés correspondent aux 8 états dans les 3 champs de recherche un par un.
Nom | Tél | . | Ecole
| | Vide | Vide | Non |
Vide | |
| |
Vide | |
Vide | |
| Vide |
Vide |
De plus, trim() est une fonction VB qui supprime les espaces avant et après la chaîne d'entrée ; % est un caractère générique à plusieurs caractères dans le langage SQL (_ est un caractère générique à un seul caractère), on peut donc voir que %" &trim()&"% est très utile pour le champ de recherche. Les mots-clés saisis correspondent respectivement de gauche à droite ; en langage SQL, et la connexion est utilisée pour indiquer qu'il existe une relation "ET" entre des conditions non vides.
Jetons un coup d'œil à la méthode progressive. Par rapport à la méthode d'énumération, elles ne diffèrent que par la partie centrale :
« Le noyau de recherche de la méthode progressive est de juger si la condition est vide ou non. Si elle n'est pas vide, ajoutez-la. à la condition de recherche
sql="select * from address which"
if Name<>"" then
sql=sql&" Name like '%"&Name&"%' "
flag=1
end if
if Tel<>"" et flag=1 then
sql=sql&" et Tel comme '%"&Tel&"% '"
flag=1
elseif Tel<>"" then
sql=sql&" Tel comme '%"&Tel&"%'"
flag=1
end if
if Company<>"" et flag=1 puis
sql=sql&" et société comme ' %"&Company&"%'"
flag=1
elseif Company <>"" then
sql=sql&" Société comme '%"&Company&"%'"
flag=1
end if
if flag=0 then
sql="select * from address order by ID asc"
end if
rs.open sql,conn,1,1
La méthode de progression est un algorithme intelligent, comme le montre la seule longueur des instructions. La difficulté et l'essence de cet algorithme résident dans le drapeau et le &. Tout d'abord, vous devez savoir que & est un symbole de concaténation de chaînes dans SQL, qui fusionne les caractères autour du symbole. Revenons au programme, lorsque Name n'est pas vide, sql="select * from address which Name like '%"&Name&"%' " ensuite, lorsque Name n'est pas vide et Tel n'est pas vide, c'est-à-dire Tel<>"" et flag=1, sql="select * from address où Name like '%"&Name&"%' et Tel like '%"&Tel&"%' " while flag=1, sinon lorsque Name est vide Tel Not vide, sql="select * from address which Tel like '%"&Tel&"%' "et flag=1 et ainsi de suite, il peut être étendu pour rechercher avec n conditions ; Bien sûr, lorsque les conditions sont toutes vides, c'est-à-dire que flag=0 sélectionnera tous les éléments de toutes les tables.
3. vérifier:
À ce stade, un moteur de recherche est mis en place. Voici quelques exemples d'utilisation :
Nom : Zhang | Téléphone : | École : | Bouton de recherche |
Les résultats de la recherche sont :
Nom : Zhang San Tél. : 33333333 Unité : Département d'informatique, Université des sciences et technologies électroniques de Chine
Nom : | Téléphone : | École : Collège | Bouton de recherche |
Les résultats de la recherche sont :
Nom : Zhang San Tél. : 33333333 Unité : Département d'informatique, Université des sciences et technologies électroniques de Chine
Nom Li Si Tél. : 44444444 Unité : Département de biologie, Université du Sichuan
Nom : Wang Er Tél. : 22222222 Unité : Département d'architecture, Université Jiaotong du Sud-Ouest
Nom : | Téléphone : 4444 | École : Sichuan | Bouton de recherche |
Les résultats de la recherche sont :
Nom Li Si Téléphone : 44444444 Unité : Département de biologie, Université du Sichuan
Nom : | Téléphone : | École : Pay% Gros | bouton de recherche |
Les résultats de la recherche sont :
Nom : Wang Er Téléphone : 22222222 Unité : Département d'architecture, Université Jiaotong du Sud-Ouest
4. améliorer:
En fait, ce moteur présente encore quelques défauts. Le problème réside principalement dans le caractère générique %. D'une part, cela est dû au fait que les gens sont habitués à utiliser * comme caractère générique. D'autre part, si % apparaît dans un lien hypertexte, % sera « mangé » lorsqu'il est obtenu via une demande, comme suit :
--test.htm--
…
<a href=test.asp?content=test%the%sign>cliquez ici</a>
…
--test.asp--
<%
contenu=requête("contenu")
réponse.écrire le contenu
%>
Lorsque vous parcourez test.htm dans IE, cliquez sur le lien hypertexte et il s'affichera comme suit :
tester la conception
On voit que % est directement ignoré par le lien hypertexte. Comment pouvons-nous résoudre ce problème ? C'est très simple, on fait un petit truc : renverser la poutre et changer le pilier.
Ajoutez le code suivant avant le noyau de recherche :
Nom=remplacer(Nom,"*","%")
Tél=remplacer(Tél,"*","%")
Entreprise=remplacer(Entreprise,"*","%")
Ajoutez le code suivant après le noyau de recherche :
Nom=remplacer(Nom,"%","*")
Tél=remplacer(Tél,"%","*")
Entreprise=remplacer(Entreprise,"%","*")
Analysons ces déclarations. replace() est une fonction de remplacement de chaîne en VB. replace(Name,"*","%") consiste à remplacer tous les * dans Name par %. En d’autres termes, nous remplaçons toutes les occurrences de * dans les trois conditions par %, de sorte que les caractères génériques des trois premières phrases soient remplacés par *. Les trois phrases suivantes peuvent empêcher % d'être « mangé ». Tous les problèmes seront résolus.
Nom : | Téléphone : | École : Pay% Gros | bouton de recherche |
Les résultats de la recherche sont :
Nom : Wang Er Tél. : 22222222 Unité : Département d'architecture, Université Jiaotong du Sud-Ouest
Modifiez à nouveau l'instruction ci-dessus et remplacez * par des espaces. Ne deviendrait-il pas le moteur de recherche que nous utilisons couramment des espaces pour séparer les conditions de recherche dans Google et Baidu ?