834HF42F242 Skrevet 12. august 2007 Del Skrevet 12. august 2007 (endret) 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 12. august 2007 av neitakk Lenke til kommentar
834HF42F242 Skrevet 12. august 2007 Forfatter Del Skrevet 12. august 2007 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
Cucum(r) Skrevet 12. august 2007 Del Skrevet 12. august 2007 Køyrer du MySQL? I såfall, bruker du MyISAM? Da kan du jo kaste på eit par fulltext indekser, slik at alt løyser seg. Lenke til kommentar
834HF42F242 Skrevet 12. august 2007 Forfatter Del Skrevet 12. august 2007 (endret) 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 12. august 2007 av neitakk Lenke til kommentar
Cucum(r) Skrevet 12. august 2007 Del Skrevet 12. august 2007 @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
Manfred Skrevet 12. august 2007 Del Skrevet 12. august 2007 Å 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. Lenke til kommentar
serverside Skrevet 12. august 2007 Del Skrevet 12. august 2007 (endret) 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 12. august 2007 av serverside Lenke til kommentar
834HF42F242 Skrevet 12. august 2007 Forfatter Del Skrevet 12. august 2007 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
Manfred Skrevet 12. august 2007 Del Skrevet 12. august 2007 En stored procedure kan gjøre ganske mye for deg, med midlertidige tabeller og slike ting. Dette er dessverre litt utenfor mitt område, men jeg vet det er andre her inne som er bedre skolert til å forklare litt om slikt Lykke til. Lenke til kommentar
Cucum(r) Skrevet 12. august 2007 Del Skrevet 12. august 2007 Å 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
834HF42F242 Skrevet 12. august 2007 Forfatter Del Skrevet 12. august 2007 (endret) Har bare SQL Server Management express. Er kjent med, men får ikke lagret "stored procedures". Ganske irriterende... Finnes det en bedre manager hvor man kan gjøre det? Btw så fungerer søkefunksjonen utmerket nå, og genereringstiden er fortsatt veldig lav: http://www.musikksmaken.com/indeks_/liste.asp Endret 12. august 2007 av neitakk Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå