array uitlezen in array
Beste leden,
Ik loop vast op een klein probleem. Kort de situatie:
Ik heb een hoofdmenu en een submenu. Dit submenu weet waar een item onder valt door middel van een parent id welke overeen komt met het id van een hoofdmenu item.
Nu heb ik een foreach lus gemaakt om het hoofdmenu te maken, maar nu wil ik kijken voor elk hoofdmenu item of er kinderen aanwezig zijn. Dus ik had een foreach lus en een if lus binnen de hoofd foreach lus geplaatst, maar het komt nooit uit. Of ik krijg alle resultaten terug, of ik krijg het max. hoofditem getal terug, en ga zo maar door.
Hoe moet ik dit oplossen?
Ik loop vast op een klein probleem. Kort de situatie:
Ik heb een hoofdmenu en een submenu. Dit submenu weet waar een item onder valt door middel van een parent id welke overeen komt met het id van een hoofdmenu item.
Nu heb ik een foreach lus gemaakt om het hoofdmenu te maken, maar nu wil ik kijken voor elk hoofdmenu item of er kinderen aanwezig zijn. Dus ik had een foreach lus en een if lus binnen de hoofd foreach lus geplaatst, maar het komt nooit uit. Of ik krijg alle resultaten terug, of ik krijg het max. hoofditem getal terug, en ga zo maar door.
Hoe moet ik dit oplossen?
Gesponsorde koppelingen:
Code?
Opzet tabel:
Query om hoofditems (level1) en subitems (level2) op te halen:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
CREATE TABLE menu_items (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
title varchar(255) NOT NULL,
parent_id int(10) unsigned DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
id int(10) unsigned NOT NULL AUTO_INCREMENT,
title varchar(255) NOT NULL,
parent_id int(10) unsigned DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Query om hoofditems (level1) en subitems (level2) op te halen:
Beste Jan, bedankt! Ik heb het principe van de joins nooit echt goed begrepen, maar die query zoals die er staat maakt een hoop duidelijk.
Echter, waar ik tegen aan loop, is dat ik niet weet hoe ik binnen deze query de juiste records kan tonen als parent_ id gelijk is aan het hoofditem.
Met andere woorden, als ik deze query gebruik ( ik krijg dan 3 records terug, wat goed is ), worden ze onder alle hoofd items weergegeven. Aangezien er 7 hoofditems zijn, krijg ik dus 21 keer iets. Terwijl het dus 3 moeten zijn, en deze moeten ook alleen onder 1 hoofditem vallen, niet alle.
///// kleine edit: misschien handig om te vermelden dat dit binnen codeIgniter is geschreven.
Echter, waar ik tegen aan loop, is dat ik niet weet hoe ik binnen deze query de juiste records kan tonen als parent_ id gelijk is aan het hoofditem.
Met andere woorden, als ik deze query gebruik ( ik krijg dan 3 records terug, wat goed is ), worden ze onder alle hoofd items weergegeven. Aangezien er 7 hoofditems zijn, krijg ik dus 21 keer iets. Terwijl het dus 3 moeten zijn, en deze moeten ook alleen onder 1 hoofditem vallen, niet alle.
///// kleine edit: misschien handig om te vermelden dat dit binnen codeIgniter is geschreven.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
// submenu genereren, dit valt binnen een foreach lus welke het normale
// menu genereert
// ps. de query komt wel goed terug, ik kan wel $r->parent_id opvragen! Dus ook
// dat moet kunnen.. maar nu..?
if($q = $this->page->menu($row->id)){
echo "\n\t\t\t\t<ul>";
foreach($q as $r){
echo "\n\t\t\t\t\t" . '<li>' . "\n\t\t\t\t\t\t" .'<a href="' . $base . $r->url . '">» ';
if($session == 'nl'){
echo "\n\t\t\t\t\t\t" . $r->name_nl;
}else{
echo "\n\t\t\t\t\t\t" . $r->name;
}
echo "\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>";
}
echo "\n\t\t\t\t</ul>";
}
[/code]
Ik weet niet of dit helpt, en ik weet dat het niet echt netjes in, maar in de bron ziet het er wel wat netter uit. Ik ga het nog opruimen, maar eerst zie ik het liefst dat het submenu ook werkt.
// submenu genereren, dit valt binnen een foreach lus welke het normale
// menu genereert
// ps. de query komt wel goed terug, ik kan wel $r->parent_id opvragen! Dus ook
// dat moet kunnen.. maar nu..?
if($q = $this->page->menu($row->id)){
echo "\n\t\t\t\t<ul>";
foreach($q as $r){
echo "\n\t\t\t\t\t" . '<li>' . "\n\t\t\t\t\t\t" .'<a href="' . $base . $r->url . '">» ';
if($session == 'nl'){
echo "\n\t\t\t\t\t\t" . $r->name_nl;
}else{
echo "\n\t\t\t\t\t\t" . $r->name;
}
echo "\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>";
}
echo "\n\t\t\t\t</ul>";
}
[/code]
Ik weet niet of dit helpt, en ik weet dat het niet echt netjes in, maar in de bron ziet het er wel wat netter uit. Ik ga het nog opruimen, maar eerst zie ik het liefst dat het submenu ook werkt.
Gewijzigd op 01/01/1970 01:00:00 door Merijn Venema
Ik weet niet zeker of ik je goed begrijp, maar met deze query zou je de hoofditems op moeten halen:
en met deze kun je per hoofditem de subitems ophalen
Voor een goede uitleg over JOINS vind ik dit plaatje erg handig:

en met deze kun je per hoofditem de subitems ophalen
Voor een goede uitleg over JOINS vind ik dit plaatje erg handig:

Mooi Plaatje is dat Jan! Lekker helder. Misschien moet ik de JOIN tutorial nog eens helemaal opnieuw gaan schrijven, en dan verder uitleggen met deze plaatjes.
Heb je 'n idee voor een goede tabelstructuur die zich hiervoor leent, zodat bij de verschillende mogelijkheden ook goede voorbeelden weer te geven zijn?
Heb je 'n idee voor een goede tabelstructuur die zich hiervoor leent, zodat bij de verschillende mogelijkheden ook goede voorbeelden weer te geven zijn?
@ Robert: ik denk dat je een opzet zou moeten hebben waarin je alle mogelijkheden kunt laten zien. Misschien een tabel films, een tabel acteurs en een koppeltabel films_acteurs?
Het plaatje komt overigens van dit artikel:
http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx
Het plaatje komt overigens van dit artikel:
http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx
Beste Jan, zeker een handig plaatje! Heb met m`n opleiding nu ook te maken met JOINS, dus vandaar dat ik er uberhaupt al iets van snap, hiervoor nooit echt nodig gehad/ omwegen gecreerd voor mezelf om dit te kunnen vermijden.
Ik heb m`n probleem overigens ook al gevonden, eigenlijk was het vrij simpel. Het waren inderdaad de resultaten. Ik wou die query slechts in keer uitvoeren voor de foreach lus, maar dan krijg je dat je geen unieke vars kunt aanmaken in je lus, dus wordt er in elke lus die functie utigevoerd. Heb het nu door middel van die query`s kunnen oplossen!
bedankt nogmaals :)
// ps. kijk uit naar je nieuwe tut Robert
Ik heb m`n probleem overigens ook al gevonden, eigenlijk was het vrij simpel. Het waren inderdaad de resultaten. Ik wou die query slechts in keer uitvoeren voor de foreach lus, maar dan krijg je dat je geen unieke vars kunt aanmaken in je lus, dus wordt er in elke lus die functie utigevoerd. Heb het nu door middel van die query`s kunnen oplossen!
bedankt nogmaals :)
// ps. kijk uit naar je nieuwe tut Robert



