Avatar billede Swift Praktikant
12. september 2000 - 21:31 Der er 19 kommentarer og
1 løsning

Søgning på fritekst i database ??

Jeg sidder og skal have lavet en god søgefunktion.

Jeg har en .mdb database med nogle felter hvor jeg gerne vil søge på en fritekst.

Pt. kan jeg kun indtaste 1 ord i en INPUT box og så søger databasen med \"LIKE\"

Men jeg vil gerne have så jeg kan søge på flere ord og evt. sige både AND, OR og NOT.
Ydermere er tabellen jeg søger i hægtet sammen med en ekstra tabel der angiver hvilken betydning en række tal har.

Pt. bruger jeg koden:
Set Data = Conn.Execute(\"SELECT DISTINCTROW Software.SoftwareID, Software.Name, Software.Location, Software.Type, Software_Type.TypeID, Software_Type.TypeName FROM Software, Software_Type WHERE Software.Type=Software_Type.TypeID AND Name LIKE \'%\" & SogTitel & \"%\' ORDER BY Name\")

Kan det laves smartere ?
Kan det laves så jeg kan søge på flere ord ?
Kan det laves så jeg kan definere AND, OR og NOT ?
Avatar billede styrmand Nybegynder
12. september 2000 - 21:39 #1
Ja det kan det, men det er en kompleks sag.
Du skal på en eller anden måde give brugeren mulighed for at opbygge dt Whereudtryk, som består af ord kombineret med AND, OR og/eller NOT.
Enten skal brugeren selv skrive det direkte, eller også, skalæ du lave en art \"guide\".
Når udtrykket er opbygget, placeres det i nde i din SQL sætning, som kun skal udvælge og kombinere tabeller, udvælge felter, samt definere sortering.
Avatar billede Swift Praktikant
12. september 2000 - 21:48 #2
Hvis jeg med den nuværende kode fx skriver \"windows AND 95\" får jeg en fejl:
\"[Microsoft][ODBC Microsoft Access 97 Driver] Data type mismatch in criteria expression\"

Så skal jeg vel vælge en anden søgefunktion end \"LIKE\" - men så skal der vel sættes en masse * og ? tegn ??
Avatar billede styrmand Nybegynder
12. september 2000 - 21:51 #3
du skal nok bare skrive \"\'Windows\' And \'95\'\".
Men de felter, du søger i, skal være af samme type (Tekst), ellers bliver det hele endnu mere komplekstststs. :-)
Avatar billede Swift Praktikant
12. september 2000 - 22:04 #4
Det var ikke lige sådan man gør !
FEJL:
\"[Microsoft][ODBC Microsoft Access 97 Driver] Syntax error (missing operator) in query expression \'Software.Type=Software_Type.TypeID AND Name alike \'%\'Windows\' AND \'95\'%\'\'. \"

Der søges kun i 1 kolonne og det hele er normal tekst !
Avatar billede styrmand Nybegynder
12. september 2000 - 22:06 #5
Der står ALIKE \'%Windows... den kender jeg ikke. :-)
Avatar billede styrmand Nybegynder
12. september 2000 - 22:08 #6
Det ser galt ud...
Software.Type=Software_Type.TypeID AND Name like \'%Windows\' OR Name Like \'95%\'\" 
Måske det er bedre.
Avatar billede Swift Praktikant
12. september 2000 - 22:14 #7
Problemet er at den variabel som indeholder søgeordene - når den skal sættes ind går det glat fordi der kommer for mange tegn... %\'`\"´\'^\"# !!
Avatar billede styrmand Nybegynder
12. september 2000 - 22:16 #8
Okay, så må man jo spørge, hvordan kan det være? :-)
Avatar billede tigerdyr Nybegynder
12. september 2000 - 23:00 #9
Med mindre modfikationer, prøv det her:

SELECT DISTINCTROW Software.SoftwareID, Software.Name, Software.Location, Software.Type, Software_Type.TypeID, Software_Type.TypeName FROM Software, Software_Type WHERE Software.Type=Software_Type.TypeID AND Name LIKE \'%Windows%\' AND Name LIKE \'%95\' ORDER BY Name
Avatar billede tigerdyr Nybegynder
12. september 2000 - 23:02 #10
Når du skal til at lege med flere søge ord, skal du huske at skille søgeord og SQL 100% fra hinanden (som stydmand også fangede)...

eg. ...søgeord & \"resten af SQL\'en\"
Der udover bør du sørge for at der ved ALLE søgeord står % både før og efter, da du derved har sikret at ordet ikke skal stå enten først eller sidst i et felt!
Avatar billede tigerdyr Nybegynder
16. oktober 2000 - 20:53 #11
hvad med en kommentar, så vi ved hvad der skete med de foreslag du har fået ??
Avatar billede Swift Praktikant
18. oktober 2000 - 19:37 #12
Jeg har prøvet både det ene og det andet - og får alle mulige fejl i hovedet. Der er endnu ikke noget af det der virker - enkelte af kombinationerne gjorde dog at der opstod uendelige løkker på serveren (godt det er min egen).

Jeg vil kun acceptere 1 søgefelt - og helst at man kan søge på flere ord fx. adskilt med AND OR eller måske + og -.

Hvis ikke der kommer nogle svar jeg kan bruge må jeg trække spørgsmålet tilbage.
Avatar billede tigerdyr Nybegynder
18. oktober 2000 - 21:23 #13
en hjælp på vejen til os, kunne være de forsøg du har gjort, samt hvilke fejl meddelelser det afledte :o)
Avatar billede Swift Praktikant
19. oktober 2000 - 01:00 #14
Hvis jeg bruger denne streng i .ASP koden:
Set Data = Conn.Execute(\"SELECT Name, Location FROM Software WHERE Name LIKE \'%\" & SogTitel & \"%\' ORDER BY Name\")
Og denne streng i søgefeltet:
Windows%\' AND Name LIKE \'%2000

Så får jeg det rigtige resultat!

Det kan tilsyneladende udvides til:
Windows%\' AND Name LIKE \'%%\' AND Name LIKE \'%2000
Hvor der i den midterste LIKE kan indsættet n antal søgeord.

Men kan det ikke laves lidt smartere - kan man lave noget med at den udskifter \" AND \" med noget der af den ovenstående kode - i den rigtige rækkesælge lige meget hvor mange ord der er ?
Og at OR også erstattes på den rigtige måde ??
Avatar billede Swift Praktikant
19. oktober 2000 - 01:02 #15
Øh, RÆKKEFØLGE - ikke rækkesælge - LOL !
Avatar billede Swift Praktikant
19. oktober 2000 - 01:11 #16
Jeg har selv prøvet med noget:
SogTitel = Replace(SogTitel, AND ,%\' AND Name LIKE \'%)

Men så går den helt i coma - med at det er forkerte tegn m.v.
Avatar billede tigerdyr Nybegynder
19. oktober 2000 - 10:28 #17
sogtitel = Replace(sogtitel, \"AND\", \"%\' AND Name LIKE %\'\")
Avatar billede tigerdyr Nybegynder
19. oktober 2000 - 10:31 #18
Eller den grundige (som jeg bare haaaader at rode med)
Du kan gå i gang med at replace alle + med AND or alle - med AND NOT...
og ellers skal du til at rode med split() funktionen og dele din søgestring ved alle mellemrum...
Så skal du ellers til at gennemskue hvor hvilke tegn skal sættes ind, da du så også får delt dine boolske operatorer op, sammen med søgeordene!
Avatar billede tigerdyr Nybegynder
19. oktober 2000 - 10:32 #19
sludder og vrøvl...
sogtitel = Replace(sogtitel, \"AND\", \"\'% AND Name LIKE %\'\")

\"Plingerne\" mellem \" og %...derved ses det i ASP som en lang string!
Avatar billede Swift Praktikant
19. oktober 2000 - 15:48 #20
Så virker det sku !
Tak for hjælpen.
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
Kurser inden for grundlæggende programmering

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