Heel simpel eigenlijk: Je neemt 1 tabel, 3 kolommen: id, naam en parent. parent nummer 0 is de top. Daarna komen onderliggende soorten met parent de waarde van de bovenliggende stam z'n id.
id, naam, parent
1, zoogdier, 0
2, insect, 0
3, lieveheersbeestje, 2 <-- ...beestje is een insect
4, spin, 2
5, vogelspin, 4 <-- vogelspin valt onder spin.
* Twan, wat was eigenlijk het doel van jouw opmerking?
<?
$query = 'SELECT * FROM _hondjes';
$result = mysql_query($query);
if ( !mysql_num_rows($result) ) {
print 'Aaahh, er zijn geen hondjes';
} else {
$hondjes = array(); # ik weet dat overbodig is, maja
while ( $row = mysql_fetch_assoc($result) ) {
$hondjes[$row['VELDNAAMVANSOORTHOND']][$row['HOND_ID'] = $row;
}
}
?>
en dan kan je pff, miss met divjes ( ik geef maar even ter idee ) zoiets doen
[code]
<?
foreach ( $hondjes as $soorthond ) {
# iets met een soorthond naam uit een andere tabel maar ben te lui om die koint te "verzinnen"
foreach ( $soorthond as $hond ) {
printf('<div class="liefhondje" id="hondje%d">%s</div>',$hond['HOND_ID'],ucfirst($hond['NAAMVANHONDVELD']));
}
}
?>
EDIT: GEEN PADDING natuur;ijk aaargg, ik bedoel position absolute, steeds beetje meer afstand per ID in css ?
( p.s. beetj3e gaar allemaal maar tis ook een boutpost van je, je hebt geluk dat ik me zo verveel :)
Maar moet het als één grote stamboom op het scherm getoond worden (wat lastig is, want dan moet je gaan rekenen met ruimte) of mag het ook gewoon een soort van chained dropdown-menu (hey, een google buzzword term!) worden waarbij je steeds specifieker kiest. En moeten er dan ook uiteindelijk hondjes aan gehangen worden, of blijft het bij een overzicht van soorten?
@jelmer: nee de eerste foreach loopt de categorieen dan wordt er 1 div getoont met class categorie en id b.v. een teller of ID,
en voor de honden ook\
als je hun naam print in de div
en je doet met css
#hondje1 { top: 10px; }
#hondje2 { top: 20px; }
#hondje3 { top: 30px; }
#hondje4 { top: 40px; } ( b.v. )
dan kijg je toch echt wel een stamboom op je scherm .
Maar hij is maar 1 niveau diep. Zou je het even beschouwen als een echte stamboom, dan zou jouw stamboom alleen maar ouders - kinderen kunnen weergeven. Je zou een 3e, en een 4e etc foreach-lus moeten toevoegen om grootouders en overgrootouders ook weer te kunnen geven. Op dat moment wordt je css een stuk lastiger, omdat je nu de ouders op de juiste plek moet positioneren, en deze positie is afhankelijk van alle kinderen daaronder (ervan uitgaande dat je de ouders in het midden boven de kinderen wilt hebben)
1. Jachthonden -> eigen stamboom
2. Engelse Bulddogs -> eigen stamboom
3. Schapen -> eigen stamboom
Maar ik neem aan dat ik dat dan in 3 verschillende tabellen moet gaan doen ? of is dat omslachtig ?...
er komt geen drop-down, gewoon een menu aan de linker kant, die dan de desbetreffende stam selecteerd.
Er worden weer honden aan gehongen, stel a krijgt puppies en een van die puppies krijgt later ook weer puppies en dat dat dan zo uitgebreid wordt...
edit:
at Twan: begrijp ik het goed dat je nu een stamboom aan het maken bent mer css ? zo ja, dat hoeft niet...het zijn gewoon linkjes ik hoef er zeg maar geen plattegrond van te hebben...er komt een menu aan de zijkant met linkjes...
Heel simpel eigenlijk: Je neemt 1 tabel, 3 kolommen: id, naam en parent. parent nummer 0 is de top. Daarna komen onderliggende soorten met parent de waarde van de bovenliggende stam z'n id.
id, naam, parent
1, zoogdier, 0
2, insect, 0
3, lieveheersbeestje, 2 <-- ...beestje is een insect
4, spin, 2
5, vogelspin, 4 <-- vogelspin valt onder spin.
* Twan, wat was eigenlijk het doel van jouw opmerking?
Geen lekker voorbeeld, zoogdier, insect en spin zijn geen beesten, maar soorten dieren, een diergroep. Binnen deze groepen zijn er dan weer andere groepen en onder deze groepen komen dan uiteindelijk de beestjes zelf aan bod.
<?
# alle div's absoluut enzo natuurlijk
print '<div style="width: 1000px;">';
foreach ( $hondjes as $soorthond ) {
# iets met een soorthond naam uit een andere tabel maar ben te lui om die koint te "verzinnen"
$breedte = 900 / count($hondjes);
$marginTop = $soort_teller * 100;
printf('<div style="width: %dpx; margin-right: 10px;">soort %d</div>',$breedte,$soort_teller);
foreach ( $soorthond as $hond ) {
$breedte2 = 900 / count($soorthond);
printf('<div style="width: %dpx; top: %dpx; margin-right: 10px;">%s</div>',$breedte2,$marginTop,ucfirst($hond['NAAMVANHONDVELD']));
}
$soort_teller++;
}
print '</div>';
?>