04. januar 2002 - 23:02Der er
8 kommentarer og 1 løsning
Kan I gennemskue følgende SQL&ASP-problem
Hej
Jeg håber der er nogle som kan give mig en hånd med et problem jeg står overfor og som jeg føler mig rimelig sikker på er tilpas komplekst, til at nogle af jer kloge hoveder herinde kan hjælpe mig (Håber jeg da) :)
Jeg skal lave en søgemekanisme på en hjemmeside som kan søge i 200 ord, hvorfra personer kan vælge op til 20 ord som så skal bruges som søgekriterierne. Det første problem er at i den tabel som der skal søges i er 8 kolonner som skal gennemsøges for om de indeholder et af de 20 ord. Det næste problem er at søgningen skal resultere i, at alle resultaterne som kommer frem kun må indeholde nogle af de 20 søgeord. Dvs. søger man på a,b,c,d så kan resultaterne være:\' a b a b c d b d a men ikke a e f
Der vil i db\'en være ca. 6000 records som skal gennemløbes og tiden er jo også rimelig kritisk på nettet, men jeg har en forventning om brugerne kan klare op til en 30 sekunder.
Er der nogle som har nogle forslag til hvordan dette kan laves, for jeg føler mig ret blank, og ser det eneste mulighed som værende at man søger på de resterne 180 ord for at sortere disse records fra. Men 180 ord i 8 kolonner (hvor ordene kan stå i flere af kolonnerne, så der er altså ingen struktur) og så i 6000 records virker ret uoverskueligt.
mvh og sig til hvis der kræves mere uddybning Dennis
Det bedste forslag jeg har indtil videre har fået fra en, er at lave en nøgleværdi som er 200 lang, og som indeholder 1/0 for om den enkelte ingrediens indgår således at man kan frasortere de steder hvor de resterne 180 ingredienser indgår og derved sidde tilbage med et brugbart resultat. Virker dog beregningsmæssigt meget tung og ret kompliceret, så forslag er som sagt meget velkomne.
Jeg tror at den metode som du har hørt er den eneste der er ligetil at indføre. men hvis du vælger at anvende eksempelvis 16 tals systemet så spare du et antal karaktere da hver tal da repræsentere 4 pladser. du kan i princippet også anvende op til 256 tals-system(ascii tegn) det giver 8 karaktere på hver plads og dermed 25 karaktere. det medføre dog også at du skal igennem qry\'en op til 4 hhv 8 gange. Det er er dog heller ikke dræbende. Jeg har lavet op til 1379 qry på en access db med over 100.000 poster på 8 sek. på et web-hotel, svarende til mere end 10.000 qry pr min. Du kan forvente en qry tid på op til langt under et sek. hvis det er sat rigtigt op. Denne løsning giver selvfølge lidt logik forud for qry\'en men det er til at overse.
hvis du skal bruge detaljer så kan du eventuelt kontakte mig på lbl@net-ware.dk
Lige et par spm. som du måske kan afklare for mig.
1. Det skal køres i en simpel accessdb, kan det det 2. Hvordan ville du lave en søgning på et sådan felt, det virker ik som om SQL kan klare det, men at man skal programmere sig ud af det, eller tager jeg fejl
3. Jeg har aldrig været ude for at skulle løse noget tilsavrende før og derfor intet kendskab til hvordan man eksempelvis vil kunne lave det med 16-talssystemet i en db. Har du nogle kilder jeg vil kunne bruge?
1. JA 2. Det kan man gøre i SQL-qry, men der skal være en tabel med værdier svarende til de søge ord. hvis søge orderne var \"mig\", \"dig\", \"os\" og \"dem\" så skulle de eksempelvis tildeles værdierne mig:1 dig:2+? os:2+?+? dem:2+?+?+? osv... så ville du bruge de samme værdier ifm udvælgelsen på hjemmesiden. 16-talsystemet er blot at samle 2*2*2*2 (altså 4 binære værdier i en karakter) hvis brugeren har valgt \"mig\" og \"dem\" så svare det til første og fjere \"to-tal\" mig:1 dem :8 16-talsværdien er 1+8=>9. Det resultere i 3 qry søg efter 1,8 og 9
Den post i databasen som har søgeorderne mig og dem vil så havde nøgle ordet 9 og kun 9 da
Hvis hjemmesiden har nøgle ordet mig:1 så skal der søges på alle de muligheder der indeholder 1 det er alle ulige. hvis det var dig:2+? så ville det være 2,3,6,7,10,11,14,15
Nej jeg har ingen hjemmeside kilde, men det fremgår af mange bøger om opbygning af datalogik.
Jeg vil lige afprøve og se om jeg kan gøre dette i virkeligheden, håber ik du har noget mod at jeg lader spm. stå åben lidt endnu (max weekenden ud), for du har hjulpet mig en del. Der er bare nogle ting jeg ikke helt kan følge endnu, deriblandt hvordan man kan få lavet en sql søgning som kan håndtere at man vil have alle dem fra dit eksempel (2,3,6,7,10,11,14,15). Der hvor jeg hopper af sporet er når man måske vil ende med 25-30 16-talsværdier efter hinanden pga. antallet af mulige ord, hvordan dælen kan SQL så hive de rigtige ud. Er det mig som skal lave en where-klausul, hvor jeg bare beder om dem som hedder Undersøgelsesfelt = 2 or Undersøgelsesfelt = 3, altså spørge om alle kombinationerne?
Jep det har du jo nok ret i og jeg sidder da også \"kun\" tilbage med noget kombinatorik jeg ik kan løse, men det er jo en anden snak, så du har fortjent pointene.
Hvis jeg skal hjælpe dig med kombinatoriken uden at alle skal kende dit projekt så send en beskrivelse af dine \"søgninger\" og hvad de går ud på så skal jeg se om jeg kan hjælpe
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.