Avatar billede msnilsson Nybegynder
26. september 2002 - 14:01 Der 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.
Avatar billede cyb Nybegynder
26. september 2002 - 14:04 #1
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 ?
Avatar billede terry Ekspert
26. september 2002 - 14:07 #2
msnilsson>You can only have one question, please close one of them or even better BOTH and move them to ASP they have VERY little to do with Access!
Avatar billede msnilsson Nybegynder
26. september 2002 - 14:14 #3
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
Avatar billede msnilsson Nybegynder
26. september 2002 - 14:48 #4
cyb: skulle der ikke stå
sqlStr = sqlStr & " AND "
i stedet for sqlStr = sqlStr & " OR " ?
Avatar billede msnilsson Nybegynder
26. september 2002 - 14:49 #5
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.
Avatar billede cyb Nybegynder
27. september 2002 - 09:52 #6
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.)
Avatar billede msnilsson Nybegynder
27. september 2002 - 11:11 #7
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%')
Avatar billede msnilsson Nybegynder
27. september 2002 - 11:12 #8
Microsoft OLE DB Provider for ODBC Drivers error '80040e10'

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 2.

/splittest.asp, line 55
Avatar billede msnilsson Nybegynder
27. september 2002 - 11:41 #9
Så lykkedes det! (Det sidste var bare forkert navn på nogle af tabelfelterne).
Tak for hjælpen
Avatar billede cyb Nybegynder
27. september 2002 - 11:57 #10
Anytime :-)

- Cyb
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester