Mailinglisten-Archive |
Hi Manuel (und alle anderen, die sich noch vor Weihnachten eine
automatische Sitemap wuenschen),
Manuel Gisbert schrieb am 26.11.2001:
>function renderLayer($parentID)
>{
> $query = "select * from tablename where refID='$parentID'";
> $result = mysql_query($query);
> while($data = mysql_fetch_array($result))
> {
> print($data["pageName"]."<br>");
> renderLayer($data["ID"]);
> // hier wird die Funktion renderLayer rekursiv aufgerufen
> // um alle Seiten anzuzeigen, die die gerade ausgegebene
> // Seite als Parent haben.
> }
>}
ich bin mal so frei und bau diesen ersten Ansatz mal aus. Der hat den
Nachteil, dass er ziemlich viele SQL Abfragen macht, die eigentlich
sinnlos sind. Wenn du 5 Hauptpunkte mit jeweile 5 Unterpunkten und
nochmals 5 Subunterpunkten hast, dann hast du mal locker 1 + 5 * 5 * 5
Abfragen, wenn ich mich nicht irre.
Ich wuerde das so machen, dass du bei jedem SELECT auch pruefst, ob
fuer das jeweilige Element ueberhaupt Unterpunkte vorhanden sind. Also
in etwa wie folgt:
function renderLayer($parentID)
{
$query = "SELECT a.*, COUNT(b.ID) AS subcnt ";
$query .= " FROM tablename AS a, tablename AS b ";
$query .= " WHERE a.refID = '$parentID'";
$query .= " AND b.refID = a.ID";
$query .= " GROUP BY a.ID";
$result = mysql_query($query);
while($data = mysql_fetch_array($result))
{
print($data["pageName"]."<br>");
if ($data["subcnt"] > 0)
{
renderLayer($data["ID"]);
}
}
}
Damit sollte man aber die Anzahl der Aufrufe deutlich senken koennen.
Dieser Ansatz liesse sich sicher noch weiter optimieren, vielleicht hat
da ja jemand Bock drauf... ;-)
Gruss,
Ralf
--
__________________________________________
In-Greece.de - die Griechenlandcommunity
_______ http://www.in-greece.de/ _________
php::bar PHP Wiki - Listenarchive