Avatar billede plato Juniormester
20. januar 2007 - 12:35 Der er 10 kommentarer og
1 løsning

Hjælp til søgefunktion

Hejsa NG.

Nu har jeg ledt og søgt på nettet/Eksperten i flere timer, og jeg kan simpelthen ikke finde en løsning, jeg kan finde ud af at stykke sammen til min løsning.

Jeg bruger følgende søgekode, som kommer fra en formular:

<%
Response.Buffer = True
if request.querystring("mode") = "movie_search" then
strKeyword = Trim(Request.Form("movie_search"))

If Len(strKeyword) = 0 Then
    ' Hvis der ikke er skrevet i feltet
    Response.Clear

    Response.Redirect("search.asp?movieerror=Du har vist glemt at angive et søge ord.")
Else
    ' Hvis der er skrevet i feltet
    strKeyword = Replace(strKeyword,"'","''")
End If

' Opbygger en dynamisk SQL streng
strSQL = "SELECT Trailer.ID as id, Trailer.titel, Trailer.detalje, Trailer.dato, TrailerDetail.Omtale, TrailerDetail.Genre, TrailerDetail.prodaar FROM Trailer inner join TrailerDetail on TrailerDetail.id = Trailer.id WHERE Trailer.titel like '%" & strKeyword & "%' ORDER BY titel"

' Skaber DSNLess forbindelse til DBen

Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open Application("Provider")

' 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
    Do While Not rs.EOF
    if rs("detalje") = true then

rs("titel") / Resultat!

end if
rs.MoveNext
Loop
   
Else

Response.Write("Der kom intet resultat på din søgning")
End If
end if
if request.querystring("mode") = "" then
Response.Write("<span class='list_font'>" & request.querystring("movieerror") & "</span>")
end if %>

Nu er det sådan at mange af vores filmtitler hedder noget med "The". Så f.eks "The Movie" bliver indsat i DB "Movie, The".

Nu er problemet at min søgefunktionen skal være helt præcis før den kommer med et resultat. Dvs. søger jeg efter "The Movie", "Movie The" får jeg ikke noget resultat. Jeg ville jo gerne at man kunne skrive The Movie og så finder den resultatet "Movie, The".

Nogen der kan hjælpe mig her?
Avatar billede ffsoft Praktikant
20. januar 2007 - 14:00 #1
Hvis du søger på "The movie" søger du på disse to ord og alt hvad der
måtte stå foran og bagved. Du vil finde "At the movies" "Movies for kids"
hvis der ellers er noget der hedder sådan.
Hvis du søger på "Movie" vil du finde "The movie" "Movie, The" alle film der
indeholder ordet movie. "Silent movie" f. eks.
Hvis du vil søge på 2 ord skal der ændres i din søgefunktion.

Du har en fejl her:
rs("titel") / Resultat!
Avatar billede ffsoft Praktikant
20. januar 2007 - 14:02 #2
Errata: "Movies for kids" skal være "The movies for kids"
Avatar billede plato Juniormester
20. januar 2007 - 17:01 #3
rs("titel") / Resultat: Ikke en fejl, fjernede bare noget HTML-kode som bare fylder her i dette spm.

I min database bliver en film oprettet med "Matrix, The". Hvis en bruger, som det er nu, indtaster i søgeformen "The Matrix" får han ikke det ønsket resultat da "Matrix, The" ikke passer overens med "The Matrix".

Det er det, jeg gerne vil have hjælp til?
Avatar billede ffsoft Praktikant
20. januar 2007 - 17:22 #4
I søgemæssig sammenhæng er der stor forskel på at søge
på "Jens Hansen" og så "Hansen, Jens" det er den samme
person, men det er to forskellige søgninger.
Men selvfølgelig kan det løses, der skal bare lokaliseres
et mønster.

Bliver "The xxx" altid til "xxx, The" altså; er reglen den at hvis
en titel starter med "The ", så skal derlaves en ekstra søgning
hvor ordene fra første mellemrum og til slut rykkes til først
i sætningen og der skal tilføjes et ", the" i slutningen af sætningen ??

"The wild one" bliver til "Wild one, the"
"The 12 days of christmas" bliver til "12 days of christmas, the"

Hvis dette er sandt er det rimeligt nemt at lave en lille function,
der skaber to udtryk at søge på.

Capisce ??
Avatar billede ffsoft Praktikant
20. januar 2007 - 17:24 #5
Hvilken database er der tale om Access/MSSQL/mySQL ??
Avatar billede plato Juniormester
20. januar 2007 - 17:38 #6
"The wild one" bliver til "Wild one, the"
"The 12 days of christmas" bliver til "12 days of christmas, the"

Dette er korrekt.
Der er tale om access.
Kan godt være det er nemt, men jeg kan ikke hitte ud af det. ;)
Avatar billede ffsoft Praktikant
20. januar 2007 - 21:39 #7
strKeyword1 = Trim(Request.Form("movie_search"))
strKeyword2 = ""

If Left(strKeyword1 , 3) = "The" Then
  strKeyword2 = Mid(strKeyword1 , 5, Len(strKeyword1 )) & ", The"
End If

if len(strKeyword2) < 1 then
  Select ........................................
  ...................
  Trailer.titel like '%" & strKeyword1 & "%' ORDER BY titel"
else
  Select ........................................
  ..........
  Trailer.titel like '%" & strKeyword1 & "%' ORDER BY titel"
end if

That's it
Avatar billede ffsoft Praktikant
20. januar 2007 - 21:40 #8
Går ikke så godt idag, den skal se sådan ud:

if len(strKeyword2) < 1 then
  Select ........................................
  ...................
  Trailer.titel like '%" & strKeyword1 & "%' ORDER BY titel"
else
  Select ........................................
  ..........
  Trailer.titel like '%" & strKeyword2 & "%' ORDER BY titel"
end if
Avatar billede plato Juniormester
21. januar 2007 - 11:50 #9
Skal det flettes sammen med koden i mit spm?
Avatar billede ffsoft Praktikant
21. januar 2007 - 13:22 #10
Jeps, du henter værdien strKeyword1 ved hjælp af request.form()
og så laver du 2 nye søgegeord hvis det første ord er "The"
disse 2 nye søgeord bruger du så til at lave 2 forskellige
SQL udtryk. Så skal du bare bruge den rigtige til at åbne
recordsettet med.
Avatar billede plato Juniormester
22. januar 2007 - 12:54 #11
Takker for din indsats.
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