12. september 2000 - 21:31Der 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 ?
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.
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.
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 ??
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. :-)
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 !
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
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!
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.
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 ??
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!
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.