2009-11-12, 16:24
#1
Jag vet inte riktigt hur jag ska beskriva mitt problem utan att dra ett exempel först. Jag har en tabell med olika produkter. Tanken är sedan att jag ska bygga något som påminner om ett binärträd av alla produkterna. Alltså har alla produkter en "förälder" som indikerar vad produkten tillhör. Fältet Parent i min tabell pekar på primärnyckeln ID för sin "förälder". Om Parent är noll innebär det att produkten ligger på rotnivå i trädet och har således ingen förälder. Så här va...
Nu hade jag då tänkt att hämta antal underprodukter med en query...
Grejen är bra att i subqueryn anger jag ju "WHERE Parent=ID". Och det är ju feltänk av mig, nu kollar queryn efter poster vars Parent=ID, och någon sån post finns ju inte. Fast jag vill ju att den ska jämföra värdet på ID som hämtas i huvudqueryn. Dvs första posten blir "Frukt" vars ID är lika med 1, det är ju det värdet jag vill jämföra Parent med i subqueryn. Går det ens att göra? Eller måste jag köra en query först som bara hämtar produkterna på rotnivå, och sen köra en ny query för varje post i resultatet som hämtar antal underprodukter?
Kod:
ID Produkt Parent 1 Frukt 0 <- Produkt på rotnivå 2 Äpple 1 3 Banan 1 4 Päron 1 5 Läsk 0 <- Produkt på rotnivå 6 Fanta 5 7 Sprite 5 8 Cola 5
Nu hade jag då tänkt att hämta antal underprodukter med en query...
Kod:
Jag hämtar alltså alla produkter vars Parent är 0, produkter på rotnivå alltså. Men jag vill samtidigt hämta antal underprodukter med hjälp av den där subqueryn. Och resultatet jag vill ha är typ...SELECT ID,Produkt,(SELECT COUNT(*) FROM Tabell WHERE Parent=ID) AS Antal FROM Tabell WHERE Parent=0
Kod:
Produkt Antal Frukt 3 Läsk 3
Grejen är bra att i subqueryn anger jag ju "WHERE Parent=ID". Och det är ju feltänk av mig, nu kollar queryn efter poster vars Parent=ID, och någon sån post finns ju inte. Fast jag vill ju att den ska jämföra värdet på ID som hämtas i huvudqueryn. Dvs första posten blir "Frukt" vars ID är lika med 1, det är ju det värdet jag vill jämföra Parent med i subqueryn. Går det ens att göra? Eller måste jag köra en query först som bara hämtar produkterna på rotnivå, och sen köra en ny query för varje post i resultatet som hämtar antal underprodukter?
