02. september 2007 - 23:22Der er
9 kommentarer og 1 løsning
Advanceret søgning i database
Jeg er ved at lave en søgefunktion på en side, mne har aldrig arbejdet med søgning i den stil før?
Det jeg vil lave er når man i et felt taster forskellige ord så skal den tage stregen med over i en ny side som laver en request.form("soeg") den skal så kun tage alle ord og tal i den sammenhæng de er i dvs. den skal droppe alt der er tegn, symboler og mellemrum og kun gemme ordrene Har en skrevet: rød maling, V2356??? skal den kun gemme dette rød maling V2356 og så søge med %like%
I databasen har jeg flere felter: Varenr, Fabrikat, Beskriv100 og Beskriv. Varenr: har et unikt nr. Fabrikat: er Fabrikat navnet på varen kan være 1 eller 2 ord Beskriv100: er en kort beskrivelse af varen Beskriv: er en lang beskrivelse af varen
Har skal den på dem alle bortset fra Varenr og gå ind og fjerne alle tegn og mellemrum så den kan finde teksten i en beskrivelse eller ved søgning på en fabrikat og så må den gerne liste dem efter dem der har flest resultater?
Jeg har søgt efter flere mulige løsninger men kan ikke rigtigt finde nogen eksempler på dette? Så er der en der kan hjælpe her?
Derudover mener jeg at du skal bruge instr i stedet for %like% men jeg er lidt kokset lige nu til at lave et eksempel... Men måske du kan søge lidt på det og på den måde komme lidt videre ;-)
bramsing >> Tror nok wandaxp mener at søgningen skal forgå i databasen hvorfor en like '%%' er helt rigtig at bruge.
wandaxp >> Det skulle ikke være et problem at få klippet søge-teksten så du kun har ordne tilbage, men jeg er ikke med på hvordan du vil have dem ind i SQL'en. Kan du ikke give et eks på hvordan den færdige SQL skal se ud (hvis du altså kan)?? Lad være med at tænke på hvordan det gøres i ASP, jeg vil bare gerne se det ønskede resultat. Noget i denne stil:
select .... where (Beskriv100 like '%V2356%' or Beskriv100 like '%rød%' or Beskriv100 like '%maling%' ... osv...)
I ASP laves der en løkke der tilføjer alle værdierne fra søgefeltet til en del af sql stregen. Herefetr forestiller jeg mig SQL stregen se ud lidt alla :
str="(Beskriv100 like " & VaerdiNr0 & " OR "Beskriv like " & VaerdiNr0 & " OR "VareNr like " & VaerdiNr0 For i=1 to AntalISoegefelt do "OR Beskriv100 like " & VaerdiNrX & " OR "Beskriv like " & VaerdiNrX & " OR "VareNr like " & VaerdiNrX next
Select * from Varer where " & str & ") SORT BY flest passende ord
Det er noegt i den stil men har som sagt ikke rigtigt rodet med søgninger før?
Noget i denne stil: search = "rød maling, V2356???" set RX = New RegExp RX.Global = True RX.IgnoreCase = True RX.Pattern = "[^\wæøåÆØÅ ]" search = RX.replace(search,"") searchArr = split(search," ")
sql = "select * from dinTabel where 1=2 " for f=0 to ubound(searchArr) sql = sql & " or (Beskriv100 like '%"& searchArr(f) &"%' or Beskriv like '%"& searchArr(f) &"%' OR VareNr like '%"& searchArr(f) &"%') " next
relevans sorteringen har jeg ingen ide om hvordan laves. Kunne forstille mig at man skal have fat i de advanceret funktioner på databasen for at lave dem.
Det vil jeg forslå du tager op i den kategori, som svare til din database (Access, MySQL eller hvad du nu bruger)
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.