Autor Zpráva
cheffreelancer
Profil *
Dobrý den
Potřebuji vypsat stromovou strukturu při výpisu kategorií, ale nevím jak do dotazu začlenit rekurzivní funkci. Momentálně jsem v této fázy, ale nic se nevypisuje.
function getTree($id="NULL") {
  $result = mysql_query("SELECT id,name,parent FROM rubriky WHERE id= ".$parent." ORDER BY id");
    while ($row = mysql_fetch_array($result)) {
    return '<tr><td class="table_bg">'.$row["id"].'</td><td class="table_bg">'.$row["name"].'</td><td><form method="post" action="/EditCategory/"><input type="hidden" name="kat_id" value="'.$row["id"].'"><input class="submit_button" type="submit" name="editsent" value="Upravit" /></form></td><td><form method="post" action=""><input type="hidden" name="kat_id" value="'.$row["id"].'"><input class="submit_button" type="submit" name="deletecat" value="Smazání" /></form></td></tr >';
  }
}
Děkuji za každou vaši radu! btw: Jsem grafik, který šel na obor informační technologie se zaměřením programování, bohužel jsem nejspíše přecenil své síly, ale nechce se mi vzdávat absolvenskou práci, když jsem ve škole přetrpěl tři roky.
Taps
Profil
cheffreelancer:
viz
http://php.vrana.cz/traverzovani-kolem-stromu-prakticky.php
http://php.vrana.cz/diskuse-s-reakcemi.php
juriad
Profil
cheffreelancer:
Možností, jak reprezentovat stromovou strukturu v databázi, je několik. Nejnevhodnější z nich (pro pokládání dotazů) je odkazování na parent_id.
Viz prezentace (od strany 49) http://www.slideshare.net/billkarwin/sql-antipatterns-strike-back
Navrhované traverzování kolem stromu je jednou z možností, ale je docela netriviální vymyslet a naprogramovat přesouvaní podstromů.
Kcko
Profil
cheffreelancer:
Nejsnažší je pokud těch kategorií nejsou tisíce uložit do pole a to projet rekurzivně, tuto metodu používám na všech svých webech. Je to jednoduché a rychlé.
cheffreelancer
Profil *
Kcko:
Ano o to jsem se právě snažil ale bohužel z těch věcí které jsem na internetu našel to moc nechápu. BTW: jsem grafik a bohužel jsem přecenil asi své síly a přihlásil jsem se po matuře na obor informační technologie se zaměřením na programování. Tyto věci řeším jen z důvodů absolvenské práce, bohužel mé zvolené téma bylo zavrhnuto s tím že k absolvenské práci musím něco naprogramovat a zadali mi vyřešit administraci cms jak z hlediska funkčnosti tak i designu podle norem. Boužel jsem si tuto věc uvědomil až po značně obtížném ukončení třetího ročníku a vzdát abp se mi nechce. Proto bych vás chtěl poprosit o nějaký hrubý nástřel a vysvětlení pro naprosté lajky:(


v podstatě je to poslední problém, který v práci nemohu vyřešit:(
juriad
Profil
cheffreelancer:
Velkou nápovědou by ti měla být funkce, kterou jsem popsal vedle; mírně jsem ji poupravil a opravil jednu chybu (porovnávání s NULL).

<?php
function GetCategoryList($parent='NULL', $levels=1) {
    $categories = array();
    # ideálně se zbav ještě té konstrukce or die; přece nechceš vypsat uživateli, že se stala chyba v sql dotazu
    $sql=mysql_query("SELECT * FROM `rubriky` WHERE `parent`" . (is_numeric($parent)?"=".$parent : "IS NULL")) or die (mysql_error());
    while($obsah = mysql_fetch_array($sql)){
        $category = array('id'=> $obsah['id'], 'name' =>$obsah['name']);
        if($levels>1) {
          $category['subcategories'] = GetCategoryList($category['id'], $levels - 1);
        }
        $categories[] = $category;
    }
    return $categories;
}

print_r(GetCategoryList('NULL', 100));
Kcko
Profil
juriad:
Zbytečně náročné pro server, neustálé volání dotazu.

cheffreelancer:
Pokud Ti to stačí v takové lamácké třídě http://sandbox.rjwebdesign.cz/dbmenu/pg.php?p=256
tak http://sandbox.rjwebdesign.cz/dbmenu/source.phps

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: