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ø