Vinnaren i pepparkakshustävlingen!
2013-01-13, 22:59
  #1
Medlem
Hej, har en databas med en tabell "kategorier" som innehåller kolumnerna "id","kategori" och "parentKategoriId".

För samtliga underkategorier är värdet i kolumnen parentKategoriId det id'et som "föräldern har". För föräldrarna är parentKategoriId=0.

För att plocka ut alla förälderkategorier och skriva dessa i alfabetisk ordning, och dessutom skjuta in alla barn under förälderkategorin har jag fått hjälp med ett SQL som inte verkar fungera hos mig men däremot hos snubben som hjälpte mig.


Kod:
SELECT a.kategori as Parent, b.kategori as Child
FROM kategorier a, kategorier b
GROUP BY Child, Parent
HAVING (a.parentKategoriId = 0 AND b.parentKategoriId = a.id) OR (a.id IN
(SELECT e.id
FROM kategorier e
WHERE 
(SELECT count(*)
FROM kategorier c, kategorier d
WHERE c.parentKategoriId = 0 AND d.parentKategoriId = c.id AND c.id = e.id) = 0 AND e.parentKategoriId = 0) AND b.id = a.id)
ORDER BY a.kategori, b.kategori

När jag kör koden får jag felmeddelandet #1054 - Unknown column 'a.parentKategoriId' in 'having clause'

Jag kan inte komma på vad som kan fela men jag kan försäkra er om att kolumnerna finns. Det fungerar till exempel att köra följande SQL (gör inte riktigt vad jag vill tyvärr):

Kod:
SELECT a.kategori as Parent, b.kategori as Child 
FROM kategorier a, kategorier b
WHERE a.parentKategoriId = 0 AND (b.parentKategoriId = a.id OR b.id = a.id)
ORDER BY a.kategori, b.kategori

Kanske värt att nämna är att han använder SQLite och jag MySQL.

Någon snäll själ därute som kanske vet? Tack på förhand!
Citera
2013-01-14, 14:38
  #2
Medlem
Om jag förstår dig rätt, så är det nåt åt det här hållet du vill göra. Det här är inte helt löst kanske, men det hjälper dig förmodligen i rätt riktning - nu sorteras dem med respektive barn under sin förälder så att säga.

Kod:
SELECT 
(CASE WHEN k.parentKategoriID=0 THEN k.id ELSE k.parentKategoriID END) AS tempId
,k.*
FROM kategorier k 
ORDER by tempId 
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback