Avatar billede klausl Nybegynder
04. august 2003 - 11:10 Der er 2 kommentarer og
1 løsning

Hjælp til kompliceret query

Jeg har fornøjelsen af videreudvikle på et udokumenteret system. De benyttes en MS-SQL database, der bl.a. indeholder tre tabeller med henholdsvis kategorier, underkategorier og underunderkategorier. Jeg har nu behov for at lave et webinterface der kan foretage en søgning i disse:

MiscTopics (aktuelle felter: MiscTopicId, MiscTopicName)
MiscSubTopics (aktuelle felter: MiscSubTopicId, MiscSubTopicName, MiscTopicId)
MiscSubSubTopics (aktuelle felter: MiscSubSubTopicId, MiscSubSubTopicName, MiscSubTopicId)

Topics kan have SubTopics (men det er ikke nødvendigvis tilfældet). På tilsvarende vis kan MiscSubTopics have MiscSubSubTopics.

Det af brugeren indtastede "søgeord" har jeg i variablen strKriterie.

Jeg forsøger at lave én query der kan finde kategorier (MiscTopicName) der indeholder strKriterie (Like %strKriterie%) samt matchede kategorier's (MiscTopicName) eventuelle underkategorier (MiscSubTopics) og disses eventuelle underunderkategorier (MiscSubSubTopics).

Desuden har jeg brug for at få finde underkategorier (MiscSubTopicName) der indeholder strKriterie (Like %strKriterie%) samt disses eventuelle underunderkategorier (MiscSubSubTopics). Jeg har også brug for navnet på MiscSubTopics.MiscTopicId ved matchede underkategorier.

Slutteligt skal jeg også finde de underunderkategorier (MiscSubSubTopicName) der indeholder strKriterie (Like %strKriterie%). For hver matched underunderkategori har jeg brug for at kende navn på både kategorien og underkategorien hvori den matchede underunderkategorien befinder sig (for at kunne udskrive dem på overskuelig vis for brugeren).

Jeg vil gerne gøre ovenstående på så effektiv vis som muligt, men er løbet lidt sur i det. Jeg er vant til at lave Select-forespørgsler der involverer flere tabeller, men har indtil nu kun nået at læse en smule om joins (diverse typer) og subqueries. Jeg har desværre ikke mulighed for at sætte mig ind i alle facetter af både diverse typer joins og subqueries før jeg laver min løsning færdig, så uden hjælp herfra ender jeg vist i en meget kluntet løsning med adskillige funktioner, regulære udtryk og sql kald der tilsammen så leverer ovenstående.

Jeg håber at nogen kan pege mig i den rigtige retning. Det optimale vil naturligvis være konkret kode der enten løser mit problem eller giver et eksempel på hvordan jeg skal angribe det. Men også svar om at det eksempelvis er inner eller outer joins, subqueries eller noget helt tredje (specifikt :P) jeg skal kigge på vil blive modtaget med kyshånd.

Venlig hilsen
Klaus Lyngsø
Avatar billede arne_v Ekspert
04. august 2003 - 11:32 #1
Det må vel være nogle queries ligesom:

SELECT * FROM MiscTopics WHERE MiscTopicName LIKE '%foobar%';

SELECT * FROM MiscTopics,MiscSubTopics
WHERE MiscTopics.MiscTopicId=MiscSubTopics.MiscTopicId AND
MiscTopicName LIKE '%foobar%';

SELECT * FROM MiscTopics WHERE MiscTopicId IN
(SELECT MiscTopicId FROM MiscSubTopics WHERE MiscSubTopicName LIKE '%foobar%';
Avatar billede klausl Nybegynder
04. august 2003 - 11:50 #2
Tak for svaret Arne. Det er ikke usandsynligt at du har fat i det rigtige. Jeg tester det lige så snart jeg kan komme til det.

Jeg ved dog ikke om jeg når det før jeg kører hjem, men jeg skal nok melde tilbage hurtigst muligt.
Avatar billede klausl Nybegynder
07. august 2003 - 09:28 #3
Det endte med at blive en serie af queries og resultatet er helt sikkert tilfredsstillende.

Desværre har jeg stadig ikke styr på de subqueries, men det må jeg læse op på snarest.

Da du er den eneste der har svaret Arne, får du pointene. Tak for dit bud, som tjente som udmærket inspiration til løsningen.
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
Computerworld tilbyder specialiserede kurser i database-management

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