Avatar billede danisher Nybegynder
23. februar 2006 - 13:57 Der er 4 kommentarer og
1 løsning

Kategorier med parent id og tilhørende spørgsmål

Hejsa alle

Jeg prøver at få hentet en række spørgsmål ud, for hver kategori jeg har i en tabel:

CREATE TABLE [dbo].[Category](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [parent_id] [int] NULL,
        [name] [varchar(100)] NOT NULL
)

CREATE TABLE [dbo].[ValuePerformQuestion](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [category_id] [int] NOT NULL,
        [question] [text] NOT NULL
)

Jeg prøver så at hente det ud sådan her:
SELECT
    Category.id as category_id,
    Category.name AS category_name,
    SubCategory.id AS subcategory_id,
    SubCategory.name AS subcategory_name,
    SubSubCategory.id AS subsubcategory_id,
    SubSubCategory.name AS subcategory_name,
    Question.id AS question_id,
    Question.question AS question_text
FROM Category
LEFT JOIN Category AS SubCategory ON
    SubCategory.parent_id = Category.id
LEFT JOIN Category AS SubSubCategory ON
    SubSubCategory.parent_id = SubCategory.id
LEFT JOIN Question ON
    (Question.category_id = Category.id OR
    Question.category_id = SubCategory.id OR
    Question.category_id = SubSubCategory.id)
WHERE Category.parent_id IS NULL
ORDER BY question_id;

Men synes ikke jeg får det rigtige resultat ud.
Mit problem ligger nok i LEFT JOIN Question ON ..., hvor jeg ikke er helt sikker på det er opstillet korrekt.

Når der er oprettet spørgsmål til hver kategori niveau, kommer spørgsmålene på "hovedkategori" niveau ud flere gange...

Der er "kun" de 3 niveauer: "Hovedkategori", "underkategori" og "underunderkategori...

Er der nogen der kan hjælpe med ovenstående?

På forhånd tak!

Mvh
Avatar billede danisher Nybegynder
23. februar 2006 - 14:19 #1
Fejl i Create Table ValuePerformQuestion - Rettes til:
CREATE TABLE [dbo].[Question](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [category_id] [int] NOT NULL,
        [question] [text] NOT NULL
)
Avatar billede jakobandersen Nybegynder
23. februar 2006 - 14:30 #2
Du skal ikke joine dine kategorier med left join, så vidt jeg lige kan gennemskue kan du gøre som nedestående

SELECT
    Category.id as category_id,
    Category.name AS category_name,
    SubCategory.id AS subcategory_id,
    SubCategory.name AS subcategory_name,
    SubSubCategory.id AS subsubcategory_id,
    SubSubCategory.name AS subcategory_name,
    Question.id AS question_id,
    Question.question AS question_text
FROM Category
INNER JOIN Category AS SubCategory ON
    SubCategory.parent_id = Category.id
INNER JOIN Category AS SubSubCategory ON
    SubSubCategory.parent_id = SubCategory.id
RIGHT JOIN ValuePerformQuestion As Question ON
    (Question.category_id = Category.id OR
    Question.category_id = SubCategory.id OR
    Question.category_id = SubSubCategory.id)
WHERE Category.parent_id IS NULL
ORDER BY question_id;
Avatar billede danisher Nybegynder
23. februar 2006 - 14:35 #3
Hejsa.. Det virker desværre bare ikke lige efter hensigten...

Jeg har prøvet ovenstående, men så får jeg ikke kategorinavnene ud på de spørgsmål der ikke hører til en "underunderkategori".

Så kategorierne "Hovedkategori" og "underkategori" giver mig kun spørgsmål ud, og NULL værdier i søjlerne for kategorinavnene... :(

Kan jeg ikke få dem med?

Ellers ser det godt ud!
Avatar billede danisher Nybegynder
28. februar 2006 - 12:03 #4
smid lige et svar, så får du pointene
Avatar billede danisher Nybegynder
13. oktober 2006 - 10:54 #5
Nå, så må jeg jo selv svare :) Skriv hvis du vil have pointene, men vil lukke spørgsmålet
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