19. november 2008 - 21:48Der er
21 kommentarer og 2 løsninger
Søgning i database
Hej eksperter
Har læst en del tråde om søgning her på eksperten og andre steder ... men har ikke helt fundet noget, jeg kunne bruge.
Er der ikke nogen som har et link til eller ligger inde med et simpelt script/noget kode, som kan håndtere en søgning i en database? Scriptet skulle gerne returner id (eller andet felt) fra de entries, hvor søgningen matcher.
Det skal være ASP og jeg anvender en MySQL, men hvis koden relateres til Accept går det også fint.
Jeg vil være interessere i den fulde kode på siden/siderne ... som jeg så kan tilpasse.
Hvis du skal lave en søgning, så kan du fx lave et søgefelt på en side. Når brugeren så indtaster noget og klikker "Søg", så dirigeres man til en ASP-side, hvor der står fx følgende:
strSQL = "SELECT id FROM [tabelnavn] WHERE [nogle felter] LIKE '" & Request.Form("sogefelt") & "'"
Så har man hentet id'erne til alle de poster i tabellen, hvor søgeordet optræder i de pågældende felter.
Ja, det ser fornuftigt ud. Men så bliver det måske lige en tand for simpelt. For vis nu brugeren taster to ord ... fx "bil" og "køretøj" i samme søgning "bil køretøj". Så finder den jo kun records med begge ord skrevet som "bil køretøj". Hvordan sikrer man at den finder alle resultater på begge søgeord?
... WHERE f1 LIKE '%bil%' AND f1 LIKE '%koeretoej%'
... WHERE f1 LIKE '%bil%' OR f1 LIKE '%koeretoej%'
... WHERE f1 LIKE '%bil%' AND f2 LIKE '%koeretoej%'
... WHERE f1 LIKE '%bil%' OR f2 LIKE '%koeretoej%'
Synes godt om
Slettet bruger
20. november 2008 - 16:00#7
Hvis du vil separere flere ord, der er skrevet i samme sætning, så handler det vel blot om at bede om at få adskilt ordene ved hvert mellemrum.
Arne V > Denne sætning: ... WHERE f1 LIKE '%bil%koeretoej%' Giver den en søgning, hvor begge ord skal forekomme (jeg kendte den ikke ;)? I så fald så er mønstret vel, at alle mellemrum udskiftes med et %-tegn, fx vha. en simpel replace-kommando.
Ja, jeg var også nået så langt som '%bil%koeretoej%'. Og det virker fint, men er jo ikke helt godt nok, hvis brugeren regner med at få alle poster, hvor enten bil eller køretøj indgår ... eller hvor begge indgår i omvendt rækkefølge.
Hvordan separerer jeg ordene og derefter bygger en sql til det passende antal ord. For det kan jo også være 3, 4 eller flere ord. Vel sagtens noget med split.
Jeg finder lige koden, som den ser ud nu og poster herefter ...
'Så finder vi posterne Set RS = Server.CreateObject("ADODB.RecordSet") Sql = "SELECT * FROM tblSprogVarer WHERE (sprogKort = '" & language & "' and (varenavn LIKE '%" & txtSearch & "%' OR varebeskrivelse LIKE '%" & txtSearch & "%' OR detaljebeskrivelse LIKE '%" & txtSearch & "%')) LIMIT 20" RS.CursorType = 2 RS.LockType = 3 RS.Open Sql, cString
sqlstr = "SELECT * FROM tabelnavn WHERE FALSE " vals = Split(fld, " ") For i = LBound(vals) To UBound(vals) sqlstr = sqlstr & " OR feltnavn LIKE '%" & vals(i) & "%' " Next
Hali halo ... det gjorde I sku' godt svende. Det virker ved en kombination af jeres forslag krydret med lidt fantasi ;-)
arne v: Man kan måske nok ikke kombinere SQL og VBS, men det er jo faktisk heller ikke det, der sker. Jeg har bare først opbygget en sql-streng, som så bagefter eksekveres med VBS'en??? Kan du ikke lige fortælle mig lidt om "FALSE". Jeg har ikke set den før, men forstår at den vel bare opfattes som en "tom" parameter. Uden den ville jeg jo have problemet med, om sql opbygningen skal starte eller slutte med et "OR". Den virker i hvert tilfælde efter hensigten ... Smid lige et svar, så deler jeg point mellem jer begge!
'---------- 'Byg Sql Dim arrSearch arrSearch = split(txtSearch, " ") ' Nu er hvert søgeord gemt. ' 3 søgeord ville fx være gemt i sog_array(0), sog_array(1) og sog_array(2)
Sql = "SELECT * FROM tblSprogVarer WHERE (sprogKort = '" & language & "' and (FALSE"
For i = LBound(arrSearch) To UBound(arrSearch) Sql = Sql & " OR varenavn LIKE '%" & arrSearch(i) & "%' OR varebeskrivelse LIKE '%" & arrSearch(i) & "%' OR detaljebeskrivelse LIKE '%" & arrSearch(i) & "%'" NEXT 'i
Sql = Sql & ")) LIMIT 20" '----------
NB Hvis nogen skulle få lyst til at anvende den fulde søgefunktion med udgangspunkt i indlægget fra 20/11-2008 20:07:30, skal I huske at erstatte Sql-sætningen med ovenstående ... og samtidig er det nødvendig at slette linjen: 'txtSearch = Replace(txtSearch," ","%")
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.