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 11:22 | Bezpečnostní upozornění

    Služba Dropbox Sign (původně HelloSign) pro elektronické podepisování smluv byla hacknuta.

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

    Byla vydána nová major verze 8.0 textového editoru GNU nano (Wikipedie). Podrobný přehled novinek a oprav v oznámení v diskusním listu info-nano nebo v souboru ChangeLog na Savannah. Volbou --modernbindings (-/) lze povolit "moderní" klávesové zkratky: ^C kopírování, ^V vložení, ^Z vrácení zpět, … Tato volba je aktivována také pokud binárka s nano nebo link na ni začíná písmenem "e".

    Ladislav Hagara | Komentářů: 3
    včera 23:22 | IT novinky

    Před 60 lety, 1. května 1964, byl představen programovací jazyk BASIC (Beginners' All-purpose Symbolic Instruction Code).

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

    Byla vydána nová verze 12.0 minimalistické linuxové distribuce (JeOS, Just enough Operating System) pro Kodi (dříve XBMC) a multimediálního centra LibreELEC (Libre Embedded Linux Entertainment Center). Jedná se o fork linuxové distribuce OpenELEC (Open Embedded Linux Entertainment Center). LibreELEC 12.0 přichází s Kodi 21.0 "Omega".

    Ladislav Hagara | Komentářů: 0
    včera 12:55 | Nová verze

    Microsoft vydal novou velkou aktualizaci 2404.23 v září 2019 pod licencí SIL Open Font License (OFL) zveřejněné rodiny písma Cascadia Code pro zobrazování textu v emulátorech terminálu a vývojových prostředích.

    Ladislav Hagara | Komentářů: 0
    včera 05:33 | Nová verze

    OpenTofu, tj. svobodný a otevřený fork Terraformu vzniknuvší jako reakce na přelicencování Terraformu z MPL na BSL (Business Source License) společností HashiCorp, bylo vydáno ve verzi 1.7.0. Přehled novinek v aktualizované dokumentaci. Vypíchnout lze State encryption.

    Ladislav Hagara | Komentářů: 0
    30.4. 23:55 | Humor

    Spouštět webový prohlížeč jenom kvůli nákupu kávy? Nestačí ssh? Stačí: ssh terminal.shop (𝕏).

    Ladislav Hagara | Komentářů: 14
    30.4. 18:11 | Nová verze

    Yocto Project byl vydán ve verzi 5.0. Její kódové jméno je Scarthgap. Yocto Project usnadňuje vývoj vestavěných (embedded) linuxových systémů na míru konkrétním zařízením. Cílem projektu je nabídnou vývojářům vše potřebné. Jedná se o projekt Linux Foundation.

    Ladislav Hagara | Komentářů: 0
    30.4. 17:56 | Nová verze

    Operační systém 9front, fork operačního systému Plan 9, byl vydán v nové verzi "do not install" (pdf). Více o 9front v FQA.

    Ladislav Hagara | Komentářů: 0
    30.4. 13:11 | Nová verze

    Svobodná webová platforma pro sdílení a přehrávání videí PeerTube (Wikipedie) byla vydána v nové verzi 6.1. Přehled novinek i s náhledy v oficiálním oznámení a na GitHubu. Řešeny jsou také 2 bezpečnostní chyby.

    Ladislav Hagara | Komentářů: 4
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (15%)
     (31%)
     (38%)
     (15%)
    Celkem 13 hlasů
     Komentářů: 2, poslední dnes 16:27
    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: 770×
    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.