26. september 2002 - 14:01Der er
9 kommentarer og 1 løsning
Avanceret tekstsøgning i SQL/ASP
Jeg forsøger at lave en søgefunktion, der kan søge på flere ord i flere tabelfelter i samme tabel samtidig. Det er en Access-database der ligger på webserveren.
Eksempelvis: Brugeren søger på "Vanløse biler". Tabellen der søges i har fire felter, hvor der kan stå enten "Vanløse" eller "biler" eller begge dele i alle felter. Resultatet af søgningen skal være alle poster hvor begge ord findes, uanset hvilke af felterne de findes i. Jeg håber det var formuleret klart nok.
Løsningen må også gerne være fleksibel nok til at der kan søges på tre eller fire ord i alle felter. Opsplitningen af søgestrengen til flere ord er ikke noget problem.
Jeg håber der er en smart måde, hvor jeg kan undgå at lave en select-sætning med en masse OR og AND.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Du har lige lavet et meget tilsvarende spr. som jeg svarede på med : Der skal nok lidt kode til da søgestrenegen skal genereres dynamisk, det bliver nok noget i stil af det her, men jeg er lidt rusten i mit ASP så tilgiv mig for små syntax fejl :-) <% searchStr = "Vanløse biler" searchArr = SPLIT(replace(searchStr," ",",")) sqlStr = "SELECT * FROM [TABELNAVN] WHERE " i = 0 while (i<searchArr.length) if (i>0) sqlStr = sqlStr & " OR " end if sqlStr = sqlStr & "([FELT1] = '"& searchArr[i] &"' OR [FELT2] = '"& searchArr[i] &"' OR [FELT3] = '"& searchArr[i] &"' OR [FELT4] = '"& searchArr[i] &"')" i = i +1 DO %> Hvorfor afviste du dette svar ?
Jaja, det er jo det jeg har gjort... Tingene går godtnok hurtigt her, cyb jeg har skrevet i det lukkede spsm hvorfor jeg afviste, men du skal nok få nogle point, jeg skal bare være sikker på der ikke findes en smartere løsning
terry: Jeg prøvede at flytte til ASP-sektionen, men det gik galt. Håber jeg lige kan blive her, da det ser ud til at jeg vil få svaret i denne kategori. Undskyld, jeg er lige blevet oprettet som bruger idag.
Nej der skal ikke stå AND - Dette ville betyde at alle ordne i searchArr skulle være at finde i felterne i den pågælden record. Du skrev i din beskrivelse at det skulle være et flere af ordne - derfor OR. Bemærk at OR ikke er en restriktiv OR - dvs. det udelukker ikke at der er flere af betingelserne der er opfyldt.
SElvfølgeligt er der måder du kan undgå alle 'OR' statementsne på - det er bare ikke smartere. Du kan eks. lave et udtræk af hele tabellen (SELECT * FROM [TABELNAVN]) og programmatisk tjekke felterne igennem inden du udskriver dem til skærmen, eller du kan lave fem udtræk, et for hvert felt i databasen (SELECT * FROM [TABELNAVN] WHERE [FELT1] = '"& searchArr[i] &"' osv.)
Begge ordene skal være til stede i recorden. Nu har jeg prøvet, men får en fejlmeddelelse. Her er SQL-sætningen og fejlmeddelelsen.
SELECT * FROM Links WHERE (KategoriAktiv=1) AND (LinkBeskrivelse LIKE '%aaa%' OR LinkURL Like '%aaa%' OR LinkNavn Like '%aaa%' OR LinkSearch Like '%aaa%') AND (LinkBeskrivelse LIKE '%bbb%' OR LinkURL Like '%bbb%' OR LinkNavn Like '%bbb%' OR LinkSearch Like '%bbb%')
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.