Hi,

Ik heb een tabel met items. Elk item kan verwijzen naar een parent item.

[items]
id
naam
parent_item_id

Stel ik heb nu een item met id 3, dan wil ik daarbij alle gekoppelde items hebben.

Poging 1:
select id
from items
where parent_item_id = '3'

Nu het probleem. Want de tabelopzet laat een soort van boomstructuur toe. Er kunnen dus meerdere laten zijn van items waarnaar word verwezen via een parent_item_id.

item A --> item B --> item C

Met bovenstaande query krijg ik alleen 1 laag diep.

Heeft iemand enig idee hoe ik dit op kan lossen?
Ik heb dat artikel ook al eens een keer gelezen. En is best interessant het enige vervelende is dat je een left en right waarde bij moet gaan houden voor elke rij. En dit moet je bij elke wijziging doen. Een oplossing hiervoor zou eventueel het gebruiken van triggers kunnen zijn.

Een andere oplossing is het in PHP code doen bijv.


<?php
$sql = 'SELECT id, item, parentid FROM items';
$items = array(); //$items[parent][] = $row;
function getItems($parent) {
	global $items;
	foreach($items[$parent] as $item) {
		//doe iets met $item (<li>$item</li> bijv)
		
		
		//is hij zelf ook parent?
		if(array_key_exists($items[$item['id']])) {
			getItems($item['id']);
		}
	}
}
?>


Misschien heb je er wat aan :)
Left en right heeft te maken met dat het op een bepaalde manier wordt opgeslagen.
Jou oplossing vind ik niet echt net, dit is beter.
Met je eens, mijn voorbeeld was ook uit de losse pols om een idee te geven hoe het een beetje werkt. ;) Uiteraard kan het netter.

Reageren