abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 00:33 | Bezpečnostní upozornění

    V repozitáři AUR (Arch User Repository) linuxové distribuce Arch Linux byly nalezeny a odstraněny tři balíčky s malwarem. Jedná se o librewolf-fix-bin, firefox-patch-bin a zen-browser-patched-bin.

    Ladislav Hagara | Komentářů: 1
    dnes 00:22 | Komunita

    Dle plánu by Debian 13 s kódovým názvem Trixie měl vyjít v sobotu 9. srpna.

    Ladislav Hagara | Komentářů: 0
    včera 13:22 | Komunita

    Vývoj linuxové distribuce Clear Linux (Wikipedie) vyvíjené společností Intel a optimalizováné pro jejich procesory byl oficiálně ukončen.

    Ladislav Hagara | Komentářů: 1
    18.7. 14:00 | Zajímavý článek

    Byl publikován aktuální přehled vývoje renderovacího jádra webového prohlížeče Servo (Wikipedie).

    Ladislav Hagara | Komentářů: 0
    18.7. 12:00 | Nová verze

    V programovacím jazyce Go naprogramovaná webová aplikace pro spolupráci na zdrojových kódech pomocí gitu Forgejo byla vydána ve verzi 12.0 (Mastodon). Forgejo je fork Gitei.

    Ladislav Hagara | Komentářů: 1
    17.7. 18:44 | Zajímavý článek

    Nová čísla časopisů od nakladatelství Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 155 (pdf) a Hello World 27 (pdf).

    Ladislav Hagara | Komentářů: 1
    17.7. 16:11 | Nová verze

    Hyprland, tj. kompozitor pro Wayland zaměřený na dláždění okny a zároveň grafické efekty, byl vydán ve verzi 0.50.0. Podrobný přehled novinek na GitHubu.

    Ladislav Hagara | Komentářů: 4
    17.7. 15:55 | Komunita

    Patrick Volkerding oznámil před dvaatřiceti lety vydání Slackware Linuxu 1.00. Slackware Linux byl tenkrát k dispozici na 3,5 palcových disketách. Základní systém byl na 13 disketách. Kdo chtěl grafiku, potřeboval dalších 11 disket. Slackware Linux 1.00 byl postaven na Linuxu .99pl11 Alpha, libc 4.4.1, g++ 2.4.5 a XFree86 1.3.

    Ladislav Hagara | Komentářů: 5
    16.7. 21:22 | IT novinky

    Ministerstvo pro místní rozvoj (MMR) jako první orgán státní správy v Česku spustilo takzvaný „bug bounty“ program pro odhalování bezpečnostních rizik a zranitelných míst ve svých informačních systémech. Za nalezení kritické zranitelnosti nabízí veřejnosti odměnu 1000 eur, v případě vysoké závažnosti je to 500 eur. Program se inspiruje přístupy běžnými v komerčním sektoru nebo ve veřejné sféře v zahraničí.

    Ladislav Hagara | Komentářů: 19
    16.7. 16:22 | IT novinky

    Vláda dne 16. července 2025 schválila návrh nového jednotného vizuálního stylu státní správy. Vytvořilo jej na základě veřejné soutěže studio Najbrt. Náklady na přípravu návrhu a metodiky činily tři miliony korun. Modernizovaný dvouocasý lev vychází z malého státního znaku. Vizuální styl doprovází originální písmo Czechia Sans.

    Ladislav Hagara | Komentářů: 26
    Kolik tabů máte standardně otevřeno ve web prohlížeči?
     (26%)
     (21%)
     (5%)
     (0%)
     (0%)
     (5%)
     (0%)
     (42%)
    Celkem 19 hlasů
     Komentářů: 3, poslední včera 17:26
    Rozcestník

    Dotaz: Strašně moc prosím o pomoc zdejší profesionály

    19.9.2011 23:31 Jurko
    Strašně moc prosím o pomoc zdejší profesionály
    Přečteno: 790×
    Dobrý večer, dělám menu a nejsem schopen s tím už druhý den hnout. Vyzkoušel jsem vážně kde co ale výsledek se nedostavil :-( O co jde. V mysql mám takové uspořádání
    ID___NAME__________________PARENT_ID
    
    1____Kategorie zboží_______0
    2____Procesory_____________1
    3____Intel_________________2
    4____Pentium IV____________3
    5____Celeron_______________3
    6____AMD___________________2
    
    a potřebuji v php napsat funkci, která dokáže vypsat ty kategorie v takovém tvaru.
    Kategorie zboží > Procesory > Intel > Pentium IV
    Kategorie zboží > Procesory > Intel > Celeron
    Kategorie zboží > Procesory > AMD
    Mě se podařilo sehnat jen kategorie které se vypisují pod sebe. viz kód
    function getTree($parent, $level) { 
      $result = mysql_query('SELECT * FROM TREE WHERE PARENT_ID='.$parent); 
      while ($row = mysql_fetch_assoc($result)) { 
        echo str_repeat(" ",$level).$row['NAME']."
    "; getTree($row['ID'], $level++); } }
    Nepomohl by mi s tím nějaký hodně zkušený profesionál, jelikož už vím, že to je zatraceně těžké jestli vůbec možné:((
    Předem děkuji za snahu pomoci
    Je to z tohoto článku: zde

    Odpovědi

    20.9.2011 01:49 buff | skóre: 10 | blog: buff
    Rozbalit Rozbalit vše Re: Strašně moc prosím o pomoc zdejší profesionály
    function getTree($parent, $path) { 
      $result = mysql_query('SELECT * FROM TREE WHERE PARENT_ID='.$parent);
      if (mysql_num_rows($result) == 0) {
        echo implode('>', $path) . "\n";
      }
      while ($row = mysql_fetch_assoc($result)) {
        getTree($row['ID'], array_merge($path, array($row['NAME'])); 
      } 
    }
    
    Psáno z hlavy, netestováno, možná je to úplná kravina. ;-) Ale třeba to aspoň inspiruje.
    20.9.2011 13:14 Jurko
    Rozbalit Rozbalit vše Re: Strašně moc prosím o pomoc zdejší profesionály
    Psáno z hlavy, netestováno, možná je to úplná kravina. ;-) Ale třeba to aspoň inspiruje.
    Když zavolám tu funkci
    getTree($parent, $path);
    tak co je ten druhý parametr $path ?

    tady akorát chyběla závorka, ale stejně to nic nevypíše :(
    getTree($row['ID'], array_merge($path, array($row['NAME'])));

    v té první funkci jsem to volal pro vypsání všech kategorii takto
    getTree(0, 0);
    a teď to mám volat jak? Děkuji
    20.9.2011 15:30 buff | skóre: 10 | blog: buff
    Rozbalit Rozbalit vše Re: Strašně moc prosím o pomoc zdejší profesionály
    Mělo by se to volat s prázdným polem.
    getTree(0, array());
    
    20.9.2011 16:17 Jurko
    Rozbalit Rozbalit vše Re: Strašně moc prosím o pomoc zdejší profesionály
    Mělo by se to volat s prázdným polem.
    getTree(0, array());
    
    Když to takto zavolám, tak dostanu na výstupu tohle
    Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes)
    20.9.2011 17:50 buff | skóre: 10 | blog: buff
    Rozbalit Rozbalit vše Re: Strašně moc prosím o pomoc zdejší profesionály
    To je velmi zvláštní, nedalo mi to a vyzkoušel jsem to. Funguje.

    Toto je přesný kód, který jsem použil.
    function getTree($parent, $path) { 
      $result = mysql_query('SELECT * FROM TREE WHERE PARENT_ID='.$parent)
        or die(mysql_error());
      if (mysql_num_rows($result) == 0) {
        echo implode('>', $path) . "\n";
      }
      while ($row = mysql_fetch_assoc($result)) {
        getTree($row['ID'], array_merge($path, array($row['NAME']))); 
      } 
    }
    
    mysql_connect("localhost", "user", "pass") or die(mysql_error());
    mysql_select_db("dbname") or die(mysql_error());
    
    getTree(0, array());
    
    20.9.2011 17:52 buff | skóre: 10 | blog: buff
    Rozbalit Rozbalit vše Re: Strašně moc prosím o pomoc zdejší profesionály
    Výstup:
    Kategorie zboží>Procesory>Intel>Pentium
    Kategorie zboží>Procesory>Intel>Celeron
    Kategorie zboží>Procesory>AMD
    
    20.9.2011 15:35 buff | skóre: 10 | blog: buff
    Rozbalit Rozbalit vše Re: Strašně moc prosím o pomoc zdejší profesionály
    tak co je ten druhý parametr $path ?
    Pole, ve kterém je popsána cesta k aktuálnímu zanoření do rekurze. Takže na začátku by měla být prázdná, v jistém okamžiku to bude třeba:
    $path == array( 'Kategorie zboží', 'Procesory', 'Intel' )
    
    A zavolá se getTree(3, $path), což by mělo zařídit vypsání
    Kategorie zboží > Procesory > Intel > Pentium IV
    Kategorie zboží > Procesory > Intel > Celeron
    
    20.9.2011 02:33 lertimir | skóre: 64 | blog: Par_slov
    Rozbalit Rozbalit vše Re: Strašně moc prosím o pomoc zdejší profesionály
    Hm hezky je vidět, jak snaha pracovat s frameworky, kategoriemi a zbavuje mnohé schopnosti základního myšlení. Pokud mám kategorie správně vypsané a pouze se mi píší pod sebe místo vedle sebe na řádek, tak tam někam nesmyslně posílám znak nový řádek.

    Ač v PHP neprogramuji a 30 let jsem z výšky pryč odhaduji, že tím místem je konec 4. řádku výpisu, kde je v uvozovkách skok na nový řádek a pak ukončení uvozovek a asi PHP oblast mezi uvozovkami vezme natvrdo jako binární string.
    20.9.2011 02:40 buff | skóre: 10 | blog: buff
    Rozbalit Rozbalit vše Re: Strašně moc prosím o pomoc zdejší profesionály
    Nene, soudíš příliš rychle. Jeho funkce zřejmě vrací něco jako toto:
    Kategorie zboží
      Procesory
        Intel
          Pentium IV
          Celeron
        AMD
    
    Takže nejde jen o odstranění nového řádku, ale o mírně komplexnější změnu zápisu.
    20.9.2011 13:15 Jurko
    Rozbalit Rozbalit vše Re: Strašně moc prosím o pomoc zdejší profesionály
    Ano, ten výpis je přesně takový ;)
    20.9.2011 10:22 blondak | skóre: 36 | blog: Blondak | Čáslav
    Rozbalit Rozbalit vše Re: Strašně moc prosím o pomoc zdejší profesionály
    No tak to bych použil Traverzování kolem stomu a pokud jde o zobrazení, pak bych vyhledal konečné listy, kde RGT=LTF+1 a vypsal jeho předky, zhruba nějak takto(netestováno)
      mysql_query('SET SESSION group_concat_max_len = max_allowed_packet');
      $result = mysql_query('SELECT GROUP_CONCAT( tree2.name ORDER BY tree2.lft ASC SEPARATOR " > " ) as path FROM tree LEFT JOIN tree tree2 ON tree2.lft <= tree.lft WHERE tree.RGT = tree.LFT +1 GROUP BY tree.id');
      while ($row = mysql_fetch_assoc($result)) {
        echo $row['path'];
      }
    
    Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
    20.9.2011 10:29 blondak | skóre: 36 | blog: Blondak | Čáslav
    Rozbalit Rozbalit vše Re: Strašně moc prosím o pomoc zdejší profesionály
    tak to query by mělo být ještě takto
    SELECT 
      GROUP_CONCAT( tree2.name ORDER BY tree2.lft ASC SEPARATOR " > " ) as path 
    FROM 
      tree 
        LEFT JOIN tree tree2 ON tree2.lft <= tree.lft AND tree2.rgt >= tree.rgt
    WHERE 
      tree.RGT = tree.LFT + 1 
    GROUP BY 
      tree.id
    
    Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
    20.9.2011 13:16 Jurko
    Rozbalit Rozbalit vše Re: Strašně moc prosím o pomoc zdejší profesionály
    Ty vaše 2 řešení snad nejsou pro uvedenou tabulku v mysql, ne?
    20.9.2011 14:36 blondak | skóre: 36 | blog: Blondak | Čáslav
    Rozbalit Rozbalit vše Re: Strašně moc prosím o pomoc zdejší profesionály
    Když se koukneš na tebou odkazovaný článek na kapitolu Traverzování kolem stromu tak tam je to popsané, určitě doporučuji investovat trochu času a používat to, pokud se tedy strom nemění moc často, což naznačené kategorie eshopu asi nebudou.
    Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
    20.9.2011 14:46 blondak | skóre: 36 | blog: Blondak | Čáslav
    Rozbalit Rozbalit vše Re: Strašně moc prosím o pomoc zdejší profesionály
    Takže pokud to shrnu, tak je řešení
    ALTER TABLE TREE ADD LFT INT NOT NULL DEFAULT 0;
    ALTER TABLE TREE ADD RGT INT NOT NULL DEFAULT 0;
    
    a po přidání položky spustit
    function rebuildTree($parent, $left) {
      $right = $left+1;
      $result = mysql_query('SELECT ID, NAME FROM TREE WHERE PARENT_ID='.$parent);
      while ($row = mysql_fetch_array($result)) {
        $right = rebuild_tree($row['ID'], $right);
      }
      mysql_query('UPDATE TREE SET LFT='.$left.', RGT='.$right.' WHERE ID='.$parent);
      return $right+1;
    }
    pokud to uděláš, do budoucna si docela dost pomůžeš.
    Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
    20.9.2011 16:37 Jurko
    Rozbalit Rozbalit vše Re: Strašně moc prosím o pomoc zdejší profesionály
    pokud to uděláš, do budoucna si docela dost pomůžeš.
    Tak jsem vložil dva sql dotazy do mysql, vytvořil se nový sloupec RGT a LFT s hodnotou 0

    pak jsem spustil tu funkci rebuildTree, která přepsala v mysql hodnotu sloupcu RGT a LFT zřejmě náhodnýma číslama :))

    Pak jsem spustil ten výpis, všechno se načetlo ale je to nějaké neseřazené/rozházané. Nešlo by spustit nějak v obráceném pořadí? TO by snad mohlo být lepší pro orientaci, nebo prostě to brát od nejmenšího id :(

    Děkuji
    20.9.2011 16:53 blondak | skóre: 36 | blog: Blondak | Čáslav
    Rozbalit Rozbalit vše Re: Strašně moc prosím o pomoc zdejší profesionály
    A co přesně to vypisuje? A s jakými parametry jsu spustil rebuildTree?
    Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
    20.9.2011 17:17 Jurko
    Rozbalit Rozbalit vše Re: Strašně moc prosím o pomoc zdejší profesionály
    A co přesně to vypisuje? A s jakými parametry jsu spustil rebuildTree?
    spouštěl jsem to takto rebuildTree(0, 0); a ten výpis je seřazený jakoby od nejvyššího id...
    20.9.2011 17:23 blondak | skóre: 36 | blog: Blondak | Čáslav
    Rozbalit Rozbalit vše Re: Strašně moc prosím o pomoc zdejší profesionály
    Jak přesně to vypíše a jak by to mělo vypsat, u mě to vypadá v pořádku, máš tam to upravené query?
    Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
    20.9.2011 17:40 Jurko
    Rozbalit Rozbalit vše Re: Strašně moc prosím o pomoc zdejší profesionály
    Jak přesně to vypíše a jak by to mělo vypsat, u mě to vypadá v pořádku, máš tam to upravené query?
    Asi bude problém někde jinde, mám v tom teď hokej, musím to pořádně vyzkoušet a dám vědět. Ale ještě prosím jedna věc, snažím se přijít na to, co ta čísla v LFT a RGT znamenaji :( Když přidám nebo smažu nějakou kategorii musím spustit znova tu funkci která vložila ta čísla v mysql?

    Díky
    20.9.2011 17:41 blondak | skóre: 36 | blog: Blondak | Čáslav
    Rozbalit Rozbalit vše Re: Strašně moc prosím o pomoc zdejší profesionály
    Ano, víc ke popsané v tom článku, nebo na googlu
    Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
    20.9.2011 17:47 Jurko
    Rozbalit Rozbalit vše Re: Strašně moc prosím o pomoc zdejší profesionály
    Tak když přidám nějakou kategorii tak je pak výpis takový
    Kategorie zboží > Procesory > Intel > Pentium IV
    Kategorie zboží > Procesory > AMD
    Ovoce > Jablko > červené
    Kategorie zboží > Procesory > Intel > Celeron > Quadro
    místo
    Kategorie zboží > Procesory > Intel > Pentium IV
    Kategorie zboží > Procesory > AMD
    Kategorie zboží > Procesory > Intel > Celeron > Quadro
    Ovoce > Jablko > červené
    
    21.9.2011 10:54 blondak | skóre: 36 | blog: Blondak | Čáslav
    Rozbalit Rozbalit vše Re: Strašně moc prosím o pomoc zdejší profesionály
    Třídění by se mělo nastavit ve funkci rebuildTree, která jede po položkách, přidej tam do selectu ORDER BY a podle jakého chceš řadit (pokud nemáš pozici, tak by tam mohlo být třeba ID), při výpisu se automarticky řadí podle LFT, když se koukneš na obrázek ve článku, tak by to mělo přesně odpovídat tomu, co potřebuješ.
    Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
    20.9.2011 18:00 Jurko
    Rozbalit Rozbalit vše Re: Strašně moc prosím o pomoc zdejší profesionály
    Jak přesně to vypíše a jak by to mělo vypsat, u mě to vypadá v pořádku, máš tam to upravené query?
    upravené query ta mám...

    a ten výpis by měl být asi takový, popořadě..
    Kategorie zboží > Procesory > Intel > Pentium IV
    Kategorie zboží > Procesory > Intel > Celeron > Quadro
    Kategorie zboží > Procesory > AMD
    Ovoce > Jablko > červené

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.