Ik heb een database met categorien, die aan elkaar gekoppeld zijn mbv een parent_id
Nu ben ik opzoek naar een query die het mogelijk maakt de tabel netjes uit te lezen.
Voorbeeld van wat ik graag als output zou krijgen:
Storing (hoofd cat)
- app (subcat niv 1)
--outlook (subcat niv 2)
--word
- netwerk
--switch
--router
aanvraag
- offerte
in tabel vorm:
id | parent_id | naam
1 | NULL | storing
2 | NULL | aanvraag
3 | 1 | app
4 | 3 | outlook
5 | 3 | word
6 | 1 | netwerk
7 | 2 | offerte
In feite is het dus mogelijk oneindig subcategorien aan te maken dmv het parent_id
Is het mogelijk om de tabel netjes uit te lezen mbv 1 query? zoals in het voorbeeld hierboven?
(Ik maak gebruik van een MS SQL 2005 database)
- SQL Query
-
22-04-2010, 09:35 #1
- Berichten
- 506
- Lid sinds
- 16 Jaar
SQL Query
Laatst aangepast door Michel Willemse : 22-04-2010 om 09:44
-
-
22-04-2010, 09:52 #2
- Berichten
- 75
- Lid sinds
- 15 Jaar
Je kunt beter meerdere tabellen gaan gebruiken.
1 tabel met de parent categorien(zonder parent_id veld dus) en 1 tabel met de child categorien (met parent_id veld als foreignd key).
Die tabellen kun je dan joinen op parent_id.
-
22-04-2010, 09:58 #3
- Berichten
- 126
- Lid sinds
- 15 Jaar
Het is niet mogelijk om de tabel met een query uit te lezen, juist omdat de gegevens dynamisch meerdere lagen diep kunnen gaan.
Het is natuurlijk wel mogelijk om een query te genereren die bepaald hoeveel lagen diep je moet gaan, maar daarvoor moet je de tabel eerst uitlezen. En als je dan toch de tabel uitleest, dan heb je de gegevens al.
Je moet dus via de programmatuur een lus bouwen, die de tabel net zolang uitleest tot er geen subcategorien meer gevonden worden.
-
22-04-2010, 10:32 #4
- Berichten
- 506
- Lid sinds
- 16 Jaar
Dan loop je toch nog steeds vast als het een subcategorie is dieper dan niveau 1?
-
22-04-2010, 11:02 #5
- Berichten
- 75
- Lid sinds
- 15 Jaar
Dan moet je per niveau een tabel maken.
-
22-04-2010, 12:15 #6
- Berichten
- 155
- Lid sinds
- 18 Jaar
het eenvoudigweg oplossen is een lastige, mysql is niet bedoeld om een boomstructuur recursive op te vragen, maar er is een omweg voor die je hier kunt vinden:
http://dev.mysql.com/tech-resources/...ical-data.html
-edit-
Mocht je overigens weten hoeveel levels je maximaal diep gaat dan kun je dit oplossen met een aantal simpele left joins:
PHP Code:SELECT * FROM categories as l0
LEFT JOIN categories as l1 ON (l1.parent_id = l0.id)
LEFT JOIN categories as l2 ON (l2.parent_id = l1.id)
LEFT JOIN categories as l3 ON (l3.parent_id = l2.id)
LEFT JOIN categories as l4 ON (l4.parent_id = l3.id)
LEFT JOIN categories as l5 ON (l5.parent_id = l4.id)
Laatst aangepast door Martijn H : 22-04-2010 om 12:22
-
22-04-2010, 12:28 #7
- Berichten
- 506
- Lid sinds
- 16 Jaar
het eenvoudigweg oplossen is een lastige, mysql is niet bedoeld om een boomstructuur recursive op te vragen, maar er is een omweg voor die je hier kunt vinden:
http://dev.mysql.com/tech-resources/...ical-data.html
-edit-
Mocht je overigens weten hoeveel levels je maximaal diep gaat dan kun je dit oplossen met een aantal simpele left joins:
PHP Code:SELECT * FROM categories as l0
LEFT JOIN categories as l1 ON (l1.parent_id = l0.id)
LEFT JOIN categories as l2 ON (l2.parent_id = l1.id)
LEFT JOIN categories as l3 ON (l3.parent_id = l2.id)
LEFT JOIN categories as l4 ON (l4.parent_id = l3.id)
LEFT JOIN categories as l5 ON (l5.parent_id = l4.id)
SELECT cat1.cat_naam,cat2.cat_naam,cat3.cat_naam,cat4.cat_naam
FROM meldingen_categorien AS cat1
LEFTJOIN meldingen_categorien AS cat2 ON cat2.parent_id = cat1.cat_id
LEFTJOIN meldingen_categorien AS cat3 ON cat3.parent_id = cat2.cat_id
LEFTJOIN meldingen_categorien AS cat4 ON cat4.parent_id = cat3.cat_id
WHERE cat1.parent_id ISNULL
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic