Autor | Zpráva | ||
---|---|---|---|
cheffreelancer Profil * |
#1 · Zasláno: 16. 8. 2013, 09:37:45
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 >'; } } |
||
Taps Profil |
#2 · Zasláno: 16. 8. 2013, 09:46:15
|
||
juriad Profil |
#3 · Zasláno: 16. 8. 2013, 10:05:38
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 |
#4 · Zasláno: 16. 8. 2013, 10:20:28
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 * |
#5 · Zasláno: 16. 8. 2013, 11:36:32 · Upravil/a: cheffreelancer
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 |
#6 · Zasláno: 16. 8. 2013, 12:17:23
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 |
#7 · Zasláno: 16. 8. 2013, 13:42:37
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 |
||
Časová prodleva: 11 let
|
0