20. januar 2007 - 12:35Der 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".
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
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.
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".
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å.
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
if len(strKeyword2) < 1 then Select ........................................ ................... Trailer.titel like '%" & strKeyword1 & "%' ORDER BY titel" else Select ........................................ .......... Trailer.titel like '%" & strKeyword2 & "%' ORDER BY titel" end if
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.
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.