25. juli 2005 - 01:05Der er
19 kommentarer og 1 løsning
Søgning i flere felter.
I forbindelse med et site har jeg en søgning, der søger i flere forskellige tabeller, lavet med en query. Problemet er, at hvis der søges på ord fra 2 forskellige felter, fx navn og efternavn, kommer der med OR ingen resultater. En mulighed var at smide al hvad der kan søges på ind i ét felt (men ikke manuelt). Kan man det i access? Alternative muligheder? Jeg bruger ASP/VB-script.
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Du kan sagtens lave en query hvor du laver et felt der består af alle dine felter i dine tabeller - indsæt f.eks. =[felt1] & [felt2] & [felt3] Så får du et felt der indeholder de valgte felter og du kan søge i dem.
you should try building the SQL in ASP and then copy it to Access query builder to see if it works there. Anotehr method is to make it in Access and then when the syntax is correct (working) copy it to ASP!
Den kode jeg bruger nu: call dbstart("SELECT * FROM soegning WHERE navn LIKE '%" & felt & "%' or efternavn LIKE '%" & felt & "%' or mail LIKE '%" & felt & "%' ORDER BY navn") hvor soegning er en query i access.
Hugopedersen: Det lyder godt, men jeg ved ikke hvor i access jeg skal skrive dette? Et sted når jeg laver en ny query i design view?
Terry: Da de indtastede søgeord kommer fra et felt, skelnes der ikke mellem navn og efternavn. Kan jeg bygge min SQL anderledes op?
Søgningen virker fint med ét ord, men søgningen spørger jo på navn OR efternavn, så hvis den finder en post hvor både navn AND efternavn passer, så 'tæller' den åbenbart ikke.
Min db-kald er: sub dbStart(sqlstr) Set rs = Server.CreateObject("ADODB.Recordset") strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("log/db.mdb") rs.Open sqlstr, strDSN, 1 end sub
Hvad mener du med "hvis jeg søger på både Jan og Jansen, så kommer der intet!"? Du søger vel på Jan eller på Jansen (altså 2 søgninger) - eller hvad? - Jan burde jo give 2 hit - Jansen burde give 1 hit Virker det ikke? ... og så husk lige, at "Navn" i visse situationer opfattes af Access som et reserveret ord. Brug hellere Fornavn.
En søgning på Jan ville give 2 hits og på Jansen, 1 hit, ja. Men jeg vil kunne søge på 'Jan Jansen' - og der får jeg 0 hit. Søgefelt (Jan Jansen) er ikke nok LIKE Jansen...eller hvad? Man kunne løse det ved at have et felt med begge navne, i.e. Jan Jansen, men så ville en søgning på fornavn og fx email stadig ikke virke (Jan mail@Jansen.dk). Nogle bud?
Jeg tager info om navn/fornavn til efterretning, tak.
Hvis du kun vil have et søgefelt, så er du nødt til at lave et felt med alle informationerne som vi startede ud med, men det er heller ikke nogen garanti for at det vil give dig de resultater du ønsker.
Hugopedersen: Ja, der er kun et søgefelt til rådighed, så selv om et felt i DB med al info måske ikke er optimalt, så er det nok det bedste p.t. Hvor sætter man (som du skrev) =[felt1] & [felt2] & [felt3] ind i en query?
Min sogning-query ser sådan ud: SELECT Huse.ID AS Huse_ID, Huse.Navn AS Huse_Navn, Vine.ID AS Vine_ID, Vine.Hus, Vine.Navn AS Vine_Navn, Vine.Slags, Vine.Aargang, Vine.Pris, Vine.Drue, Vine.Meta, Huse.Område, Huse.Land, Vine.Lager FROM Huse INNER JOIN Vine ON Huse.ID = Vine.Hus;
SELECT [fldName] & " " & [fldLastName] AS fldSearch FROM tblNames; Læg mærke til '& " " &' mellem felterne - det er nødvendigt hvis du vil kunne søge på f.eks. Jan Jansen Uden mellemrum vil din søgning ikke returnere noget.
Sådan, hella sweet! Det var præcis det jeg søgte. Jeg opretter et spg. til dig med point (da de oprindelig point gik til hjælp fra Terry). Det eneste der nu mangler, er en slags opdeling af søgeord, så orderne ikke behøves at komme i samme rækkefølge i søgningen, fx med:
SELECT fldName & " " & fldLastName & " " & fldEmail AS fldSearch FROM tblNames; giver en søgning på 'Jan Jansen mail@Jansen.dk' det rigtige hit, mens søgningen 'Jan mail@Jansen.dk Jansen' ikke gør. Det er et ekstra spørgemål og får selvfølgelig ekstra point (opretter det separat, hvis der ikke lige er en hurtig løsning).
Man kunne også som nødløsning tilpasse rækkefølge i query i forskellige kombinationer (fx 'fldName & " " & fldLastName & " " & fldEmail' og 'fldName & " " & fldEmail & " " & fldLastName'), men med 10+ felter bliver det ret omfattende - hvordan med hastighed, ville det betyde noget at femdobble længden på det felt der søges i (250 felter, med ca. 1.000 tegn(i.e. normalt 200 tegn))?
Synes godt om
Ny brugerNybegynder
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.