Avatar billede cotus Nybegynder
21. maj 2002 - 21:55 Der 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?

/cotus
Avatar billede askhoej Praktikant
21. maj 2002 - 22:03 #1
Hvis du vil lave din egen søgemaskine, skal du have opbygget en databasemodel indeholdende tabeller f.eks. links, linkskategorier m.m.

Herefter kan du bruge SQL til at søge i dine tabeller, f.eks:

SELECT * FROM links WHERE beskrivelse = '%fck%'

Men hvor meget styr har du på ASP og databaser?
Avatar billede -master-d- Nybegynder
21. maj 2002 - 22:51 #2
Ja der er jo

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.
Avatar billede medions Nybegynder
22. maj 2002 - 01:32 #3
Kundedatabasen har følgende struktur:

Kunder

ID Navn Adresse Bynavn Beskrivelse

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.

Opbygningen af vores search.htm ser sådan ud:

<html><head>
<title>Fritekst søgning</title>
</head><body>
<form action="search.asp" method="POST">
<input type="text" name="keyword" size="30"><br>
<input type="submit" name="Action" value="Søg">
</form>

</body></html>


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.


<% Response.Buffer = True %>
<html><head>
<title>Søgeresultat</title>
</head><body>

<%
' 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
%>

</body></html>

//>Rune
Avatar billede -master-d- Nybegynder
22. maj 2002 - 11:50 #4
medions <--

hvad med at sætte et link ind istedet for ...

http://activedeveloper.dk/aspdigital/kapitel2/search.asp

eller hvad.

syntes nok det så bekendt ud
Avatar billede medions Nybegynder
22. maj 2002 - 12:11 #5
-master-d-> well, det kunne man jo oxo!
//>Rune
Avatar billede -master-d- Nybegynder
23. maj 2002 - 22:10 #6
hva' cotus er der noget du kan bruge eller har du brug for mere ???
Avatar billede cotus Nybegynder
08. juni 2002 - 14:34 #7
Desværre... kunne jeg ikke bruge det! :(
Avatar billede landsten Nybegynder
13. december 2005 - 21:29 #8
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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester