Environnement de course: IIS
Langue de script: vbscript
Base de données: Access / SQL Server
Langage de la base de données: SQL
1 et 1 résumé:
Quels que soient les sites Web dynamiques tels que le forum, le système d'actualités ou le système de téléchargement, tout le monde voit souvent la fonction de recherche: publications de recherche, utilisateurs de recherche, logiciel de recherche (dans les mots clés de recherche courts), etc. Cet article présente comment établir un efficace Efficacité pratique, recherchez une recherche multi-valeurs basée sur ASP.
Cet article est confronté à plusieurs conditions et à une vague recherche correspondante, qui comprend la multi-conditions, et une seule recherche d'état n'est pas un morceau de gâteau. D'une manière générale, il existe deux façons de rechercher plusieurs conditions: l'énumération et les méthodes progressives. La condition de recherche n'est pas trop longue (n <= 3) et la méthode d'énumération peut être utilisée. De toute évidence, lorsque les conditions sont augmentées, la méthode de progression doit être adoptée dans les deux procédures et peut être réalisée. Il convient de souligner que la méthode d'énumération est très simple, si la condition du jugement est vide, puis recherchée en fonction des conditions non vides. Avec de nombreuses conditions (je crois que personne ne va faire ce genre de choses dans 4 conditions, nous devons déjà écrire 16 ensembles de phrases); Celui-ci est d'utiliser la position du logo (Flag), et la seconde consiste à utiliser la chaîne dans la connexion SQL String Connection. Expliquez l'exemple de l'établissement du moteur.
2 Exemple:
Nous avons établi un moteur de requête d'adresses.
Nom d'identité Tel School
1 trois 333333333 Université des sciences et technologies électroniques Université des sciences et technologies électroniques
2 LI 444444444 Département de biologie de l'Université du Sichuan
3 Wang 222222222 Southwest Jiaotong University Department of Architecture
... ... ... ...
L'interface de recherche Web est la suivante:
Nom: Tél: École: bouton de recherche
La procédure source de la méthode d'énumération est la suivante:
<% @ Codepage = 936%>
'Base de données de connexion
<%
tabar
daby dboath
Rs sombre
SQL DIM
Définir Conn = Server.CreateObject (ADODB.Connection)
Dbpath = server.mappath (adresses d'adresse.mdb)
Conn.open Driver = {Microsoft Access Driver (* .mdb)};
Set rs = server.createObject (adodb.oldset)
'Obtenez le nom, le téléphone, la valeur scolaire de la page Web
nom dim
Tél sombre
Schol
Nom = demande (nom)
Tel = demande (Tel)
École = demande (école)
`` Le cœur de la méthode d'énumération, car il y a 3 conditions, vous devez écrire 8 groupes de déclarations de jugement
Si Trim (nom) = et Trim (Tel) = et Trim (School) = alors
SQL = SELECT * From Address Order by Id ASC
terminer si
Si Trim (nom) = et Trim (Tel) = et Trim (école) <> alors
SQL = SELECT * À partir de l'adresse où l'école comme '% & Trim (School) &% Order by Id ASC
terminer si
Si Trim (nom) = et Trim (Tel) <> et Trim (School) = puis
SQL = SELECT * FROM ADRESS WHERE Tel Like '% & Trim (Tel) &%' Order by Id ASC
terminer si
Si Trim (nom) = et Trim (Tel) <> et Trim (School) <> puis
SQL = SELECT * FROM ADRESS WHERE Tel Like '% & Trim (Tel) &%' et l'école comme '% & Trim (School) &% Order by Id ASC
terminer si
Si Trim (nom) <> et Trim (Tel) = et Trim (School) = puis
SQL = SELECT * From Address où le nom comme '% & Trim (Name) &%' Order by Id ASC
terminer si
Si Trim (nom) <> et Trim (Tel) = et Trim (School) <> puis
SQL = SELECT * From Address où le nom comme '% & Trim (Name) &%' et l'école comme '% & Trim (School) &%' Order by Id ASC
terminer si
Si Trim (nom) <> et Trim (Tel) <> et Trim (School) = puis
SQL = SELECT * From Address où le nom comme '% & Trim (Name) &%' et Tél Like '% & Trim (Tel) &%' Order by Id ASC
terminer si
Si Trim (nom) <> et Trim (Tel) <> et Trim (School) <> puis
SQL = SELECT * From Address où le nom comme «% & Trim (Name) &%» et Tel Like «% & Trim (Tel) &%» et l'école comme «% & Trim (School) &% Order by Ad Sc
terminer si
Rs.OOPEN SQL, Conn, 1,1
'Afficher les résultats de recherche
Si Rs.Eof et Rs.Bof alors
Response.Write n'enregistre pas actuellement dans le carnet d'adresses
autre
faire tout en pas Rs.Eof
Nom de l'écriture: & rs (nom) & tel: & rs (Tel) & School: & rs (School) & <br>
Rs.MovEnext
boucle
terminer si
'Brisez la base de données
Définir RS = rien
Conn.Close
Définir Conn = Rien
%>
Lorsque vous comprenez les procédures ci-dessus, concentrez-vous sur la partie centrale, 8 ensembles de phrases une par un correspondant aux 8 états des 3 boîtes de recherche une par une
Nom Tel School
Vide
Vide et vide
Vide et vide
Vide non-vide non-empty
Non vide
Non-empty non empty
Non-empty non empty
Non-empty non empty non empty
De plus, Trim () est fonction de VB, supprimez l'espace avant et après la chaîne d'entrée;% est le passage multi-caractéristique de la langue SQL (_ est un seul passage de caractères), qui montre que% & Trim () &% entrée dans la zone de recherche Entrée Les mots clés sont appariés à la gauche et à la droite;
Jetons un coup d'œil à la méthode de progression.
'Le cœur de la méthode de recherche, la condition de jugement est vide et la non-empty l'ajoutera à la condition de recherche
Sql = sélectionner * à partir de l'adresse où
Si nom <> alors
Sql = sql & name comme '% & name &%'
Drapeau = 1
terminer si
Si tel <> et flag = 1 le
SQL = SQL & et Tel Like '% & Tel &%'
Drapeau = 1
Elseif tel <> alors
SQL = SQL & Tel Like '% & Tel &%'
Drapeau = 1
terminer si
Si l'entreprise <> et Flag = 1 alors
SQL = SQL & et entreprise comme «% & Company &%»
Drapeau = 1
Elseif Company <> alors
SQL = SQL & Company comme '% & Company &%'
Drapeau = 1
terminer si
Si Flag = 0 alors
SQL = SELECT * From Address Order by Id ASC
terminer si
Rs.OOPEN SQL, Conn, 1,1
La méthode de progression est un algorithme sage, qui peut être vu seul à partir de la longueur de l'instruction. La difficulté et l'essence de cet algorithme se trouvent sur le drapeau et &. Tout d'abord, vous devez être clair et en SQL est un symbole de connexion de chaîne, couchant les caractères autour du symbole ensemble. Retour au programme, lorsque le nom n'est pas vide, SQL = SELECT * dans l'adresse où le nom comme '% & name &%' Simultanément Flag = 1; alors lorsque le nom n'est pas vide et que le TEL n'est pas vide, c'est-à-dire, c'est-à-dire, c'est-à-dire, c'est-à-dire, c'est-à-dire, Tel <> et et de quand drapeau = 1, sql = select * à partir de l'adresse où le nom comme '% & name &%' et tel like '% & tel &%' en même temps, sinon lorsque le nom est vide, SQL = Sélectionner * à partir de l'adresse w ici tel comme '% & tel &%' en même temps Flag = 1; et ainsi de suite. Bien sûr, lorsque les conditions sont vides, c'est-à-dire Flag = 0 sélectionneront tous les éléments du tableau.
3 et 3 vérifier:
À ce stade, un moteur de recherche est établi. Voici quelques exemples d'utilisation:
Nom: Zhang Tel: École: bouton de recherche
Les résultats de la recherche sont:
Nom: Zhang San Tél: 3333333 Unité: Département informatique de l'Université des sciences électroniques et de la technologie
Nom: Tél: École: bouton de recherche universitaire
Les résultats de la recherche sont:
Nom: Zhang San Tél: 3333333 Unité: Département informatique de l'Université des sciences électroniques et de la technologie
Nom Li Si Tél: 44444444 Unité: Département de biologie de l'Université Sichuan
Nom: Wang ER Tél: 22222222 Unité: Département d'architecture, Southwest Jiaotong University
Nom: Tél: 4444 École: bouton de recherche du Sichuan
Les résultats de la recherche sont:
Nom Li Si Tél: 44444444 Unité: Département de biologie de l'Université Sichuan
Nom: Téléphone: École: bouton de recherche de paie
Les résultats de la recherche sont:
Nom: Wang ER Tél: 22222222 Unité: Département d'architecture, Southwest Jiaotong University
4 améliorer:
En fait, ce moteur a encore des défauts. D'une part, c'est parce que les gens utilisent généralement * comme canal, et d'autre part, s'il apparaît dans l'hyperlien, il sera mangé lors de l'obtention de la demande, comme suit:
--test.htm--
Fauchage
<A href = test.asp?
Fauchage
--test.asp--
<%
contenu = demande (contenu)
Response.Write Content
%>
Lorsque vous parcourez Test.htm dans IE, cliquez sur l'hyperlien, et il est affiché comme:
TestTheSign
On peut voir que% est directement ignoré par l'hyperlien. Comment pouvons-nous résoudre ce problème? C'est très simple, faisons un peu de poutres de volée des mains et des pieds et des colonnes qui changent.
Ajoutez le code suivant avant le cœur de recherche:
Nom = remplacer (nom, *,%)
Tel = remplacer (tel, *,%)
Société = remplacer (entreprise, *,%)
Ajoutez le code suivant au cœur de la recherche:
Nom = remplacer (nom,%, *)
Tel = remplacer (tél,%, *)
Société = remplacer (entreprise,%, *)
Analysons ces phrases. Remplacer () est une fonction de remplacement de chaîne dans VB. En d'autres termes, nous avons remplacé les trois conditions des trois conditions à%, afin que les trois premières phrases soient changées en *. Les 3 dernières phrases peuvent empêcher% de manger%. Tous les problèmes seront résolus.
Nom: Téléphone: École: bouton de recherche de paie
Les résultats de la recherche sont:
Nom: Wang ER Tél: 22222222 Unité: Département d'architecture, Southwest Jiaotong University
Modifiez les instructions ci-dessus et remplacez * par la grille vide.
Fonction supplémentaire: si nous voulons interroger le titre et le contenu dans le même tableau, mais que nous voulons les organiser dans l'ordre de ces deux, comme découvrir le premier écran qui répond au titre, comment peut-il être réalisé derrière le titre? Intersection
SQL = SELECT * dans le produit où Tite comme '% & Keyword &%'
SQL = SQL + UNION SELECT * dans le produit où le contenu comme «% et mot clé &%» Ordre par ID DESC
Ajoutez-en un au milieu des deux instructions SQL, et Union peut être entendue en combinaison, mais la colonne doit être la même, et il y en a également une.
Nous utiliserons les requêtes conjointes de l'Union, qui atteindront les fonctions ci-dessus.
Analyse: La requête de la base de données sera interrogée en fonction des données avec le titre, puis la réalisation de la requête de données du contenu est donc divisée.