13. maj 2006 - 19:07Der er
28 kommentarer og 1 løsning
Søgning i database med flere søgeord
Hej eksperter
Jeg har fundet flere indlæg omkring mit spg., men kan ikke få overblikket :-).
Jeg har følgende kode:
<% ' 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,"'","''") 'strKeyword = Replace(strKeyword, \"AND\", \"\'% AND Name LIKE %\'\") 'http://www.eksperten.dk/spm/25512 End If
' Opbygger en dynamisk SQL streng strSQL = "SELECT ID, Bruger, Overskrift, Beskrivelse FROM kontakthistorier WHERE" strSQL = strSQL & " (Bruger LIKE '%" & strKeyword & "%')" strSQL = strSQL & " OR (Overskrift LIKE '%" & strKeyword & "%')" strSQL = strSQL & " OR (Beskrivelse LIKE '%" & strKeyword & "%')"
Set rs = Conn.Execute(strSQL) %>
Når koden er sat til strKeyword = Replace(strKeyword,"'","''") virker det helt perfekt, hvis der kun er indsat 1 søgeord, men ikke, hvis der i boksen indtastes flere søgeord. Jeg har prøvet flere metoder for at få det til at virke på flere søgeord, men uden held. Jeg har set http://www.eksperten.dk/spm/25512 og prøvet at ændre til 'strKeyword = Replace(strKeyword, \"AND\", \"\'% AND Name LIKE %\'\") (se kode), men der kommer blot en fejlmelding.
Mit spg. er nu, om mit problem kan ændres ved blot at ændre en linie, eller mere skal ændres?
Super. Jeg har tidligere også ændret det til feltet i min tabel, men det ændrer intet overhovedet. Stadig muligt at søge på 1 søgeord, men intet resultat, hvis jeg i feltet skriver 2 søgeord. Når der er flere søgeord indtastet i boksen, skal de vel skilles ad - kan det egentlig ske ved blot at ændre den linie, som vi her skriver om???
Hvis jeg søger på ordene "sommerhus historie", bliver udskrivningen således:
DEBUG: SELECT ID, Bruger, Overskrift, Beskrivelse FROM kontakthistorier WHERE (Bruger LIKE '%sommerhus historie%') OR (Overskrift LIKE '%sommerhus historie%') OR (Beskrivelse LIKE '%sommerhus historie%')
Er nok ikke helt med. Umiddelbart har strKeyword = Replace(strKeyword, "AND", "%' AND Name LIKE '%") ikke nogen virkning, da der stadig kan søges på et søgeord, selvom linien helt slettes.
DEBUG: SELECT ID, Bruger, Overskrift, Beskrivelse FROM kontakthistorier WHERE (Bruger LIKE '%sommerhus %' AND Beskrivelse LIKE '% historie%') OR (Overskrift LIKE '%sommerhus %' AND Beskrivelse LIKE '% historie%') OR (Beskrivelse LIKE '%sommerhus %' AND Beskrivelse LIKE '% historie%')
Søger reelt de 2 ord i 2 forskellige felter?? Hvad skal Name egentlig rettes til??
Det er det er er en af fejlene; SQL'en burde se sådan her ud i stedet:
DEBUG: SELECT ID, Bruger, Overskrift, Beskrivelse FROM kontakthistorier WHERE (Bruger LIKE '%sommerhus %' AND Bruger LIKE '% historie%') OR (Overskrift LIKE '%sommerhus %' AND Overskrift LIKE '% historie%') OR (Beskrivelse LIKE '%sommerhus %' AND Beskrivelse LIKE '% historie%')
Jeg har en tabel med felterne Bruger, Overskrift og Beskrivelse. Brugeren skal kunne lave en søgning i disse felter - en søgning med flere søgeord. Nok forklaring?
Du har et søgefelt, og det vil du gerne kunne indtaste et eller flere søgeord i?
Du har ikke et søgefelt for Bruger, Overskrift og Beskrivelse?
Hvis ordene "sommerhus" og "historie" indtastes i søgefeltet, ønsker du så at finde de hits som indeholder "sommerhus" OR "historie" (begge skal være der) eller dem som indeholder "sommerhus" ELLER "historie" (blot et af dem skal være der)?
Jeg har kun ét søgefelt - et samlet søgefelt, hvor det gerne skal være muligt at søge på enten 1 eller flere ord. Jeg ønsker vist at finde OR, altså hvor begge skal være der
<% ' 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, "'", "''") strKeyword = Replace(strKeyword, " AND ", "%' AND [placeholder] LIKE '%") strKeyword = "([placeholder] LIKE '%" & strKeyword & "%')" End If
' Opbygger en dynamisk SQL streng strSQL = "SELECT ID, Bruger, Overskrift, Beskrivelse FROM kontakthistorier WHERE "
DEBUG: SELECT ID, Bruger, Overskrift, Beskrivelse FROM kontakthistorier WHERE (Bruger LIKE '%sommerhus%' AND Bruger LIKE '%historie%') OR (Overskrift LIKE '%sommerhus%' AND Overskrift LIKE '%historie%') OR (Beskrivelse LIKE '%sommerhus%' AND Beskrivelse LIKE '%historie%')
Det kræver dog, at brugeren selv skriver AND imellem søgeordene. Kan det laves sådan, at AND "automatisk" indsættes, hvis der er flere søgeord? Er det nemt at vise brugeren noget af teksten fra databasen omkring søgeordet (håber du forstår :-)?
Jeg giver gerne nogle flere point, hvis det er nødvendigt, for din hjælp er virkelig helt kanon!
Tak for hjælpen. Lille tillægsspg., hvis du har mod på det. Jeg har lavet det sådan, at hvis en historie har status = 0 i feltet "Aktiv", skal den ikke med i søgningen. Jeg har derfor ændret:
strSQL = "SELECT ID, Brugernavn, Overskrift, Beskrivelse FROM kontakthistorier WHERE "
til
strSQL = "SELECT ID, Brugernavn, Overskrift, Beskrivelse FROM kontakthistorier WHERE Aktiv = '1' AND "
IGEN tak for hjælpen - det virker helt perfekt - og jo, det var selvfølgelig uden ''
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.