SELECT docs.Subject, tags.Name FROM Tags tags INNER JOIN Documents docs ON tags.DocumentID = docs.ID WHERE (indsæt-din-expression)
Dette vil give dig
Doc1 | tag1 Doc1 | tag2 Doc2 | tag3
Jeg vil forresten gøre opmærksom på at dit eksempel er ugyldigt, når du siger at du skal have følgende returneret:
Doc1 | tag1,tag2 Doc2 | tag1,tag3
Da en tag-record kun har én reference til en document-record kan du ikke referere tag1 til både Doc1 og Doc2. Gør i stedet det at du opretter en tredje tabel der indeholder relationer mellem Documents og Tags-tabellen. Således:
CREATE TABLE Tags-Documents ( id INT, Document_id INT, Tag_id INT )
Jeg har faktisk allerede en reference tabel, glemte lige at få den med.
Det jeg mere præcist har brug for er at putte data ind i en Dokument klasse som har to properties 1. Subject som er en string og 2. Tags som er et array.
Er det ikke muligt at lave et udtræk som ikke skal efterbehandles?
Ikke umiddelbart, da du jo ikke kan have et vilkårligt antal kolonner (det ville også være uhensigtsmæssigt at arbejde med). Ihvertfald ikke så vidt jeg ved. Ellers skal du lave en query på et enkelt dokument, og dette dokument's tags. I så fald vil du jo have et array af tags, som rækker i dit resultset. Det skulle dog ikke være den store opgave at efterbehandle dine data, hvilket sprog/miljø bruger du, og hvad er grunden til at du vil undgå det?
Jeg bruger c#. Grunden er at jeg kunne slippe for efterbehandlingen, som måske vil gøre systemet langsommere end hvis data kom direkte fra en sql query.
Hvis du har et forslag til hvordan jeg gør det hurtigst i c# eller VB, vil jeg meget gerne høre om det.
Men smid lige et svar, for nu ved jeg det ikke kan lade sig gøre i sql. Og tak for hjælpen.
Det skal du ikke være bange for :). Medmindre du har en MEGET stor database, så burde det slet ikke være noget problem. Husk også på at det kun er din første databehandling der eventuelt kan tage lang tid. Når du behandler din data kan du jo evt. lægge den ned i et associativt array af en art, hvilket også gør din søgetid en del hurtigere (hvis du vel og mærke skal identificere dine tags på en tekststreng, ellers er en integer hurtigst). Optimering kan udføres på mange måder, men jeg vil ikke mene at du opnår noget ved at lade databasen behandle dine data for dig, i stedet for at gøre det lokalt.
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.