Gå til innhold

Anbefalte innlegg

Har et problem. Når jeg skal hente ut info fra databasen basert på tekststrenger, får jeg ikke til å hente det med nøkkelord. Dvs. at jeg kun får treff om tekststrengen er eksakt lik treffet.

 

Eks: Søker etter "Alice Cooper" i kolonnen for artist-titler. Det gir treff. Men når jeg søker etter "Cooper Alice", gis det ikke treff. Jeg er ute etter en kode/tankegang som kan gi eller-treff, og ikke bare og-treff.

 

Her er en eksempelkode som representerer tankegangen jeg har brukt. Den er noe forenklet i forhold til min egentlige kode som inneholder mer avanserte funksjoner som filter osv, så ikke ta i bruk min kode her hvis du vil unngå hacking:

 

ASP-kode:

Dim strKeyWord
strKeyWord = Trim(Mid(Request.QueryString("key"), 1, 35))

 

SQL-setning:

strSQL = "SELECT Artist.Artist_ID, Artister.Artist_Name FROM Artister WHERE Artister.Artist_Name LIKE '%" & strKeyWord & "%';"

 

Hvordan kan jeg få splittet søkestrengen hvis den inneholder flere ord, er vel hovedspørsmålet.

Endret av neitakk
Lenke til kommentar
Videoannonse
Annonse

Jeg har nå fått til å splitte opp setningen ved å gjøre det slik:

 

Dim strKeyWordArray
strKeyWordArray = split(strKeyWord, "")

Da kan jeg hente ut ordene ved å skrive

strKeyWordArray(0)
strKeyWordArray(1)
strKeyWordArray(2)

Hvordan kan jeg hente ut antall ord det ble søkt etter?

Lenke til kommentar

Fant endelig ut av det, etter x antall forsøk.

 

Dim SearchSQL
For Each strKeyWord In strKeyWordArray
SearchSQL = SearchSQL & "AND Indeks_Artist.Artist_Name LIKE '%" & strKeyWord & "%' "
Next

og sender SearchSQL inn i SQL-setningen.

 

Henrik Lied: Nei, det er MsSql.

Endret av neitakk
Lenke til kommentar

@neitakk:

Les eg den setninga feil om eg trur at den søkjer etter kvart søkjeord kvar for seg? I såfall blir jo resultatet tatt heilt ut av konteksten.

 

Om du ikkje har moglegheit til å køyre dei eksisterande tabellane over til MySQL vil eg anbefale deg å lage ei separat MySQL-database til søking, som inneheld alt av informasjon om radene i MSSQL-databasa.

Lenke til kommentar

Det er alltid skummelt å generere sql-setninger slik som eksemplene over gjør. Vær obs på sql-injections. Lag en stored procedure som Manfred sier og send inn data vha parameters.

 

Når det gjelder selve søkingen er ikke bruk av LIKE nødvendigvis best. Dersom du har mulighet vil jeg anbefale å kikke på SQL Full Text Searching

 

Ta en kikk på

Understanding SQL Server Full-Text Indexing

Full Text Search on SQL 2000 Part 1

Full Text Search on SQL 2000 Part 2

 

eller se på en av de mange andre tutorials om dette: google søk

Endret av serverside
Lenke til kommentar

serverside: Filtrerer bort alle tegn som kan åpne for injection, så tror jeg er på den trygge siden. Fjerner alle tegn som ikke er numeriske eller bokstaver. I tillegg logger jeg forsøk på å skrive slike tegn i adressen i en egen tabell, for å avdekke eventuelle hacke-forsøk.

 

Henrik Lied: Den søker etter hvert ord for seg selv, fordi brukeren skal slippe å skrive nøyaktig rekkefølge på artistnavn. Det blir ikke tatt ut av konteksten fordi søket gjøres på titler, og ikke artikler. Leverer resultatet på sidetall, så da er ikke et høyt antall søketreff noe å frykte heller.

 

Det er forøvrig ikke aktuelt å gå over til MySQL av grunner jeg ikke skal ta opp her. Det fører bare til idiotiske diskusjoner.

 

Men det er jo ganske typisk at noen alltid skal komme med svar og forslag til noe helt annet enn det som blir spurt om.

Eksempelvis når noen spør om noe angående ASP, så ønsker dem ikke til svar "Gå over til PHP så kan du gjøre sånn og sånn".

 

Takker for alle innspill. :)

Lenke til kommentar
Å overføre data til en mySql-databse for å gjøre en søking er jo direkte tull. Det du kan gjøre er å opprette en stored procedure, som utfører søket for deg.

9264181[/snapback]

Kvifor det? På dei fleste større sider har ein ei eiga/fleire database® som har søk som einaste oppgåve.

Om denne sida ikkje har så veldig høg last hadde nok stored procedures vore det ideelle, ja.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...