21. maj 2002 - 21:55Der er
7 kommentarer og 1 løsning
Søgemaskine
Hvordan laver man en søgemaskine? Jeg vil, vel at mærke, LÆRE det, ikke have et link til netCoders eller sådan! Hvordan gør man, hvad er SQL-sætningen for SØG, osv?
som sagt selectsætningen man bruger til at søge i sine db'er
SQL = "Select * From links Where links ='" & søgeord & "'"
Så kan man jo selvfølgelig lave en if-sætning el. en funktion. Du skal jo have et tekstfelt som man søger fra, her er det kaldet tekstfelt.
SQL = "Select * From links Where link = '" & Request.Form & "'" Or beskrivelse = '" & Request.Form & "'"" Set rs = Conn.Execute(SQL) 'Hvis der er nogle links som indeholder søgeordet If Not rs.EOF Then link = rs("link") beskrivelse = rs("beskrivelse")
Response.write "<u><b>" & link & "</u></b><br>" & beskrivelse & "<br>" rs.Movenext 'gentag til alle links er løbet igennem. loop While Not rs.EOF 'hvis der ingen links var med søgeordet else Response.Write Søgning sluttede uden resultat. End If
Det er mit bud på en søgemaskine, vil gerne hjælpe til lidt mere triggy funktioner hvis der er behov for det.
For at lave en søgning skal vi først og fremmest have en side med et søgefelt, denne side har jeg valgt at kalde search.htm, dernæst skal vi også have en side der kan håndtere informationerne fra dette dokument, dette har jeg kaldt search.asp.
Som du sikkert har bemærket referere vores ACTION= til search.asp dokumentet, dette betyder at når vi har skrevet vore søge ord og trykke på knappen Søg, vil search.htm sende indholdet af vores Keyword felt videre til search.asp, som derefter starter en søgning med det indtastede nøgleord.
Når man laver en søgning i en database bruger man operatoren LIKE som udvælgelses tegn i stedet for "er lig med" tegnet. En simpel SQL streng til at søge i vores kundedatabase kunne se ud som:
SELECT ID, Navn, Adresse, Bynavn, Beskrivelse FROM Kunder WHERE (Navn LIKE 'Anders')
Denne SQL streng vil søge gennem kundedatabase og returnere alle kunder hvis navn er "Anders". Hvis vi f.eks. havde en kunde der hedde Anders And, vil han ikke blive fundet i denne søgning, grunden til at han ikke vil blive fundet er at ovenstående SQL streng kun returnere kunder som præcis hedder "Anders", hverken mere eller mindre. Hvis vi f.eks. ønsker at få vist alle kunder der begynder med Anders, ville SQL strengen se ud som denne:
SELECT ID, Navn, Adresse, Bynavn, Beskrivelse FROM Kunder WHERE (Navn LIKE 'Anders%')
Læg mærke til at jeg har tilføjet % tegnet efter Anders, hvilket betyder at SQL strengen nu vil returnere alle poster der begynder med Anders, dette kunne f.eks. være "Anders And", "Andersine" og "Andersen".
Jeg kunne også have placeret % tegnet foran Anders som i denne SQL streng:
SELECT ID, Navn, Adresse, Bynavn, Beskrivelse FROM Kunder WHERE (Navn LIKE '%Anders')
Denne SQL streng vil returnere alle poster der slutter på Anders, som f.eks. "Hans Anders". Til sidst kunne jeg placere % tegnet både foran og bagved Anders hvilket ville returnere alle poster hvori Anders indgår, som f.eks. "Hans Andersen", "Anders And" eller "Hans Anders Jensen".
Indtil nu har vi set hvordan vi kan lave en søgning i et enkelt felt i databasen. For at lave en fri tekst søgning som er brugbar er vi nødt til at søge i kolonnerne "Navn", "Adresse", "Bynavn", "Beskrivelse". Den følgende SQL streng vil søge gennem de nævnte kolonner, efter poster der matcher "Anders"
SELECT ID, Navn, Adresse, Bynavn, Beskrivelse FROM Kunder WHERE (Navn LIKE 'Anders') OR (Adresse LIKE 'Anders') OR (Bynavn LIKE 'Anders') OR (Beskrivelse LIKE 'Anders')
Da vi jo ikke på forhånd kan vide hvilke ord vores bruger vil søge efter, er det nødvendigt at lave SQL strengen dynamisk. Dette kan vi gøre ved først at lægge værdien fra søgefeltet (den fra search.htm) i en variabel og derefter opbygge vores SQL streng.
<% ' Henter værdien fra search.htm strKeyword = Request.Form("Keyword") ' Opbygger en dynamisk SQL streng strSQL = "SELECT ID, Navn, Adresse, Bynavn, Beskrivelse FROM Kunder WHERE" strSQL = strSQL & " (Navn LIKE '" & strKeyword & "')" strSQL = strSQL & " OR (Adresse LIKE '" & strKeyword & "')" strSQL = strSQL & " OR (Bynavn LIKE '" & strKeyword & "')" strSQL = strSQL & " OR (Beskrivelse LIKE '" & strKeyword & "')" %>
Dette lille stykke ASP kode vil opbygge en søgestreng med det nøgleord som vi indtaster i dokumentet search.htm. Dernæst er det blot at skabe et recordset, og derefter udskrive resultatet på skærmen.
Jeg håber at du har fået en forståelse for hvordan man kan søge i sine databaser med ASP. Der findes selvfølgelig mange forskellige måder at gøre det på, hvor dette nok er den mest simple.
Herunder er den fulde sourcecode til search.asp, husk at du kan downloade hele eksemplet (search.htm, search.asp, search.mdb) i bunden af dette dokument.
<% ' Henter værdien fra soeg.htm strKeyword = Trim(Request.Form("Keyword"))
If Len(strKeyword) = 0 Then ' Hvis der ikke er skrevet i feltet Response.Clear Response.Redirect("search.htm") Else ' Hvis der er skrevet i feltet strKeyword = Replace(strKeyword,"'","''") End If
' Opbygger en dynamisk SQL streng strSQL = "SELECT ID, Navn, Adresse, Bynavn, Beskrivelse FROM Kunder WHERE" strSQL = strSQL & " (Navn LIKE '%" & strKeyword & "%')" strSQL = strSQL & " OR (Adresse LIKE '%" & strKeyword & "%')" strSQL = strSQL & " OR (Bynavn LIKE '%" & strKeyword & "%')" strSQL = strSQL & " OR (Beskrivelse LIKE '%" & strKeyword & "%')"
' Skaber DSNLess forbindelse til DBen strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("search.mdb") Set myConn = Server.CreateObject("ADODB.Connection") myConn.Open strDSN
' Skaber et recordset udfra SQL strengen Set rs = myConn.Execute(strSQL) If Not (rs.BOF Or rs.EOF) Then ' Hvis der er fundet poster på søgningen Response.Write "<p>Søgeresultat</p>" Response.Write "<table border=1>" Response.Write "<tr><th>Navn</th><th>Adresse</th><th>By</th><th>Beskrivelse</th></tr>" Do While Not rs.EOF Response.Write "<tr><td>" & rs("Navn") & "</td>" Response.Write "<td>" & rs("Adresse") & "</td>" Response.Write "<td>" & rs("Bynavn") & "</td>" Response.Write "<td>" & rs("Beskrivelse") & "</td></tr>" rs.MoveNext Loop Response.Write "</table>" Else ' Hvis der ikke er fundet poster på søgningen Response.Write "<p>Der er ikke fundet noget på denne søgning</p>" End If
' Rydder op efter os myConn.Close Set myConn = Nothing %>
hmmm jeg syns det ser meget intresant ud det her. jeg vil da godt høre lidt mere om det. jeg kan regne ud at jeg skal lave en kategori der hedder links og så en der hedder links igen. jeg ved godt hvordan man opretter en kategori i sql databasen men hvordan ved jeg at jeg har lavet den rigtige da der er flere muligheder til hvordan man kan oprette en kategori
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.