Ik geraak niet meteen uit het volgende probleem. Ik heb dus een menu waarbij sommige pagina's subpagina's hebben en andere niet. Een voorbeeldje:
Home
- Over ons
Diensten
- Wat?
- Prijzen
Contact
Deze zaken wil ik dus naar het scherm schrijven. Hiervoor maak ik gebruik van 2 tabellen. Eén met de hoofdpagina's en één met de subpagina's. Een link tussen beide tabellen leg ik zo:
* In de tabel hoofdpagina's maak ik een veld dat aangeeft of er bij de corresponderende hoofdpagina een subpagina is. Een 0 geeft aan dat er geen subpagina is, een 1 geeft aan dat er wel één is.
* In de tabel subpagina's is er een veld dat aangeeft welke subpagina past bij welke hoofdpagina.
Tot en met hier lukt het mij door gebruik te maken van twee queries. De eerste query selecteert alle hoofdpagina's samen met hun subpagina's. De tweede query selecteerd alle hoofdpagina's die geen subpagina's hebben.
Echter, nu moeten de gegevens geselecteerd worden op het zgn. 'volgordeid, een veld dat aanwezig is in mijn tabel. Dat lukt mij niet aangezien ik met twee queries werk (en dus met twee While-lussen).
Je maakt 1 while lus die door de hoofdpagina's (direct al op volgorde met b.h.v. een ORDER BY in je query) gaat.
Elke keer laat je hem controleren of die subpagina's heeft.
Heeft die dat wel haal je die erbij een print je die erbij.
Heeft die dat niet print je alleen de hoofdpagina.
Je maakt 1 while lus die door de hoofdpagina's (direct al op volgorde met b.h.v. een ORDER BY in je query) gaat.
Elke keer laat je hem controleren of die subpagina's heeft.
Heeft die dat wel haal je die erbij een print je die erbij.
Heeft die dat niet print je alleen de hoofdpagina.
$hoofdpaginaQuery = mysql_query("SELECT * FROM hoofdpaginas ORDER BY volgordeid ASC");
while($arr = mysql_fetch_array($hoofdpaginaQuery))
{
if($arr['subpaginas'] == 1)
{
// hier dat proces weer doorlopen met het ophalen van je subpagina en hoofdpagina + subpagina printen
}
else
{
// Hier de hoofdpagina printen
}
}
$hoofdpaginaQuery=mysql_query("SELECT * FROM hoofdpaginas ORDER BY volgordeid ASC");
SELECT hoofdpaginas.titel AS htitel,
hoofdpaginas.tekst as htekst,
hoofdpaginas.sectie as hsectie,
subpaginas.titel AS stitel,
subpaginas.tekst as stekst,
subpaginas.sectie as ssectie,
FROM hoofdpaginas
INNER JOIN subpaginas
ORDER BY hoofdpaginas.volgordeid, subpaginas.volgordeid
ON (hoofdpaginas.paginaid = subpaginas.paginas)
<?php
$query1 = mysql_query("SELECT paginas.paginaid, subpaginas.paginaid, subpaginas.titel, subpaginas.gepubliceerd, subpaginas.sectie, subpaginas.datum FROM paginas, subpaginas WHERE paginas.paginaid = subpaginas.paginas ORDER BY subpaginas.volgordeid ASC") or die(mysql_error());
?>
<?php
$query1=mysql_query("SELECT paginas.paginaid, subpaginas.paginaid, subpaginas.titel, subpaginas.gepubliceerd, subpaginas.sectie, subpaginas.datum FROM paginas, subpaginas WHERE paginas.paginaid = subpaginas.paginas ORDER BY subpaginas.volgordeid ASC") or die(mysql_error());
De output begint in ieder geval al op het gewenste resultaat te lijken . Wel is er nog één probleempje. Bij een pagina die 1 of meer subpagina's heeft, worden alle subpagina's weergegeven. Weet iemand hoe dit kan verholpen worden?
Toch zou ik je (jullie) willen bedanken voor je bereidwilligheid (tot nu toe ) !
SELECT hoofdpaginas.titel AS htitel,
hoofdpaginas.tekst AS htekst,
hoofdpaginas.sectie AS hsectie,
subpaginas.titel AS stitel,
subpaginas.tekst AS stekst,
subpaginas.sectie AS ssectie,
FROM hoofdpaginas
INNER JOIN subpaginas
ORDER BY hoofdpaginas.volgordeid, subpaginas.volgordeid
ON (hoofdpaginas.paginaid = subpaginas.paginas)
je krijgt een resultaat zoals dit: (heb niet alles bekeken is maar om werking uit te leggen:
hoofdpagina##subpagina
#################
home ##profiel
home ##forum
home ##login
forum ##tile1
forum ##tile2
je loopt gewoon door het resultaat van je query zoals je dat al deed, en elke keer als de hoofdpagina <> de vorige hoofdpagina --> je begint aan een nieuwe hoofdpagina.
<?php
$result = mysql_query($query);
$Mainpage = "";
while($row = mysql_fetch_array($result)) {
if ($row[htitel] <> $MainPage) {
// Hier je code om een nieuwe hoofdpagina toe te voegen
$MainPage = $row[htitel];
//voeg nu subpagina toe (de eerste rij waarin de nieuwe
// hoofdpagina voorkomt is gelijk ook al een subpagina: denk
// hieraan!
} else {
// Voeg een gewone subpagina toe
}
}
?>
<?php
// ...
// Hier je code om een nieuwe pagina toe te voegen
// ...
// voeg nu subpagina toe (de eerste rij waarin de nieuwe
// hoofdpagina voorkomt is gelijk ook al een subpagina: denk
// hieraan!
// ...
// Voeg een gewone subpagina toe
?>
<?php
// ...
// Hier je code om een nieuwe pagina toe te voegen
// ...
// voeg nu subpagina toe (de eerste rij waarin de nieuwe
// hoofdpagina voorkomt is gelijk ook al een subpagina: denk
id = auto_increment id
parent = het parent-id (0 als het de root van de boom is)
query:
SELECT *
FROM tabel
ORDER BY id, parent
PHP:
Bouw een lijst van de items. Hierbij geef je aan welke childs een item heeft. Dit kan met een enkele for(each) lus, omdat parents altijd een lager id hebben dan de childs (je kunt geen child toevoegen aan een niet-bestaande parent).
<?
$tree = array();
while ($row = mysql_fetch_assoc($res)) {
$tree[$row['id']] = array('childs' => array());
// de parent van dit item bestond al, dus voeg dit item toe als child van deze parent
$tree[$row['parent']]['childs'][] = $row['id'];
}
?>
$tree[$row['id']] = array('childs' => array());
/* de parent van dit item bestond al, dus voeg dit item toe als child van deze parent */
$tree[$row['parent']]['childs'][] = $row['id'];