phpbar.de logo

Mailinglisten-Archive

[php] sitemap -> treeview

[php] sitemap -> treeview

Ralf Eggert php_(at)_phpcenter.de
Mon, 26 Nov 2001 16:43:58 +0100


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