Ik heb een tabel met hoofd- en subcategorieën. Elke categorie krijgt een naam, een unieke ID en als hij onder een bestaande categorie valt, krijgt hij een parentID mee. Die parentID verwijst naar een hoofdcategorie met een unieke ID.
Uiteindelijk wil een lijst krijgen met kopjes en subkopjes. Zoiets als:
Hoofdcategorie 1
- Ding 1
- Ding 2
- Ding 49
Subcategorie 3
- Ding 4
- Ding 5
Hoofdcategorie 2
Subcategorie 1
- Ding 6
Etc.
Ik heb een andere tabel (dingen) met dingen die onder bovengenoemde categorieën vallen. Met de catid verwijs ik naar de tabel met categorieën om de juiste categorie eraan te verbinden. Volgens mij allemaal vrij eenvoudig.
Nu wil ik graag een hiërarchische lijst printen met alle dingen uit tabel DINGEN. De lijst begint met alle dingen in hoofdcategorie 1, dan subcategorie 3, dan hoofdcategorie 2, dan subcategorieën 1 en 2, etc.
Om tabellen met elkaar te verbinden weet ik dat je een JOIN zou kunnen gebruiken. Met een LEFT JOIN kom ik een heel eind.
Met bovenstaande code krijg ik keurig netjes een lijst met alle dingen en de bijbehorende categorie. En dat op alfabetische volgorde. Maar nu wil ik ook de hoofdcategorieën weten, als die er zijn. Dus ik gebruik een extra LEFT JOIN om nogmaals de categorieëntabel bij te voegen, maar ditmaal om de namen van de hoofdcategorieën te verkijgen.
Met bovenstaande krijg ik nagenoeg hetzelfde resultaat als de eerste selectquery. Het enige verschil is dat ik een extra kolom krijg waar overal NULL ingevuld staat. Volgens mij volg ik redelijk de stappen die deze meneer in zijn relaas zet: http://mikehillyer.com/ar...erarchical-data-in-mysql/
Kan iemand mij een schop in de goeie richting geven? Heb ik mijn tabellen verkeerd opgebouwd? Wat is er verkeerd aan mijn query? Het zal vast iets eenvoudigs zijn, maar ik heb er nu al flink wat uren ingestopt en ik kom er niet meer uit.
code:
1
2
3
4
5
6
7
8
| catid | catname | parentid 1 | Hoofdcategorie 1 | NULL 2 | Hoofdcategorie 2 | NULL 3 | Hoofdcategorie 3 | NULL 4 | Subcategorie 1 | 2 5 | Subcategorie 2 | 2 6 | Subcategorie 3 | 1 |
Uiteindelijk wil een lijst krijgen met kopjes en subkopjes. Zoiets als:
Hoofdcategorie 1
- Ding 1
- Ding 2
- Ding 49
Subcategorie 3
- Ding 4
- Ding 5
Hoofdcategorie 2
Subcategorie 1
- Ding 6
Etc.
Ik heb een andere tabel (dingen) met dingen die onder bovengenoemde categorieën vallen. Met de catid verwijs ik naar de tabel met categorieën om de juiste categorie eraan te verbinden. Volgens mij allemaal vrij eenvoudig.
Nu wil ik graag een hiërarchische lijst printen met alle dingen uit tabel DINGEN. De lijst begint met alle dingen in hoofdcategorie 1, dan subcategorie 3, dan hoofdcategorie 2, dan subcategorieën 1 en 2, etc.
Om tabellen met elkaar te verbinden weet ik dat je een JOIN zou kunnen gebruiken. Met een LEFT JOIN kom ik een heel eind.
code:
1
2
3
4
5
6
7
8
9
10
11
| SELECT br.description, bc.catname FROM dingen AS br LEFT JOIN categories AS bc ON br.catid=bc.catid ORDER BY bc.catname ASC |
Met bovenstaande code krijg ik keurig netjes een lijst met alle dingen en de bijbehorende categorie. En dat op alfabetische volgorde. Maar nu wil ik ook de hoofdcategorieën weten, als die er zijn. Dus ik gebruik een extra LEFT JOIN om nogmaals de categorieëntabel bij te voegen, maar ditmaal om de namen van de hoofdcategorieën te verkijgen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| SELECT br.description, bcc.catname, bcp.catname FROM dingen AS br LEFT JOIN categories AS bcc ON br.catid = bcc.catid LEFT JOIN categories AS bcp ON bcc.catid = bcp.parentid ORDER BY bcp.catname ASC |
Met bovenstaande krijg ik nagenoeg hetzelfde resultaat als de eerste selectquery. Het enige verschil is dat ik een extra kolom krijg waar overal NULL ingevuld staat. Volgens mij volg ik redelijk de stappen die deze meneer in zijn relaas zet: http://mikehillyer.com/ar...erarchical-data-in-mysql/
Kan iemand mij een schop in de goeie richting geven? Heb ik mijn tabellen verkeerd opgebouwd? Wat is er verkeerd aan mijn query? Het zal vast iets eenvoudigs zijn, maar ik heb er nu al flink wat uren ingestopt en ik kom er niet meer uit.
We zijn allemaal vaandeldrager in een optocht van gekwetsten.