abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 13:00 | IT novinky

    Jednodeskový počítač Raspberry Pi slaví 12 let. Prodej byl spuštěn 29. února 2012 (Wikipedie, 𝕏).

    Ladislav Hagara | Komentářů: 2
    dnes 12:00 | Nová verze

    Byla vydána verze 3.2 multiplatformního integrovaného vývojového prostředí (IDE) pro rychlý vývoj aplikaci (RAD) ve Free Pascalu Lazarus (Wikipedie). Přehled novinek v poznámkách k vydání. Využíván je Free Pascal Compiler (FPC) 3.2.2.

    Ladislav Hagara | Komentářů: 0
    dnes 11:44 | Nová verze

    Byla vydána nová verze 1.6.0 grafického správce diskových oddílů GParted (GNOME Partition Editor) a také verze 1.6.0 živé distribuce GParted Live, která obsahuje tohoto správce a další nástroje pro zálohování či obnovu dat. Linux byl povýšen na verzi 6.6.15-2.

    Ladislav Hagara | Komentářů: 0
    dnes 06:00 | Nová verze Ladislav Hagara | Komentářů: 0
    včera 22:44 | Nová verze

    Byla vydána (𝕏) únorová aktualizace aneb nová verze 1.87 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a animovanými gify v poznámkách k vydání. Ve verzi 1.87 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 9
    včera 22:11 | Nová verze

    Byla vydána (Mastodon, 𝕏) nová verze 2024.1 linuxové distribuce navržené pro digitální forenzní analýzu a penetrační testování Kali Linux (Wikipedie). Přehled novinek se seznamem nových nástrojů v oficiálním oznámení.

    Ladislav Hagara | Komentářů: 0
    včera 18:44 | Zajímavý software

    Společnost Cloudflare pod licencí Apache 2.0 uvolnila zdrojové kódy svého frameworku Pingora napsaného v Rustu pro vytváření rychlých, spolehlivých a programovatelných síťových systémů.

    Ladislav Hagara | Komentářů: 0
    včera 16:55 | IT novinky

    Účet za cloudové služby může nepříjemně překvapit. Například místo obvyklých 0 dolarů se ve vyúčtování může objevit 104 500 dolarů. Uživatel si u Netlify hostoval jednoduchý web a 4 roky nemusel nic platit. Měsíčně se nikdy nepřeneslo více než 10 GB dat. V únoru se to ale změnilo. Během několika dnů to jenom na jedné písničce v mp3 udělalo 164 TB a za každých 100 GB navíc by měl uživatel platit 55 dolarů. V rámci reklamace byla cena snížena na 5 225

    … více »
    Ladislav Hagara | Komentářů: 2
    včera 12:44 | Nová verze

    Komunita KDE s hrdostí uvádí Plasma 6, Frameworks 6 a Gear 24.02 postavené na Qt 6. Předchozí velké vydání 5 bylo vydáno téměř před 10 lety (červenec 2014).

    Ladislav Hagara | Komentářů: 12
    27.2. 21:11 | Nová verze

    Byla vydána nová major verze 6.0 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Založena je na Debianu 12 Bookworm a GNOME 43. Přehled změn v příslušném seznamu. Tor Browser byl povýšen na verzi 13.0.10.

    Ladislav Hagara | Komentářů: 0
    Kolik máte nálepek na víku notebooku?
     (18%)
     (60%)
     (5%)
     (3%)
     (5%)
     (9%)
    Celkem 427 hlasů
     Komentářů: 18, poslední 27.2. 20:10
    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: 766×
    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.