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 14:22 | Komunita

    Na YouTube je k dispozici videozáznam z včerejšího Czech Open Source Policy Forum 2024.

    Ladislav Hagara | Komentářů: 0
    dnes 13:22 | Nová verze

    Fossil (Wikipedie) byl vydán ve verzi 2.24. Jedná se o distribuovaný systém správy verzí propojený se správou chyb, wiki stránek a blogů s integrovaným webovým rozhraním. Vše běží z jednoho jediného spustitelného souboru a uloženo je v SQLite databázi.

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

    Byla vydána nová stabilní verze 6.7 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 124. Přehled novinek i s náhledy v příspěvku na blogu. Vypíchnout lze Spořič paměti (Memory Saver) automaticky hibernující karty, které nebyly nějakou dobu používány nebo vylepšené Odběry (Feed Reader).

    Ladislav Hagara | Komentářů: 0
    dnes 04:55 | Nová verze

    OpenJS Foundation, oficiální projekt konsorcia Linux Foundation, oznámila vydání verze 22 otevřeného multiplatformního prostředí pro vývoj a běh síťových aplikací napsaných v JavaScriptu Node.js (Wikipedie). V říjnu se verze 22 stane novou aktivní LTS verzí. Podpora je plánována do dubna 2027.

    Ladislav Hagara | Komentářů: 0
    dnes 04:22 | Nová verze

    Byla vydána verze 8.2 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a v informačním videu. Zdůrazněn je průvodce migrací hostů z VMware ESXi do Proxmoxu.

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

    R (Wikipedie), programovací jazyk a prostředí určené pro statistickou analýzu dat a jejich grafické zobrazení, bylo vydáno ve verzi 4.4.0. Její kódové jméno je Puppy Cup.

    Ladislav Hagara | Komentářů: 0
    včera 22:44 | IT novinky

    IBM kupuje společnost HashiCorp (Terraform, Packer, Vault, Boundary, Consul, Nomad, Waypoint, Vagrant, …) za 6,4 miliardy dolarů, tj. 35 dolarů za akcii.

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

    Byl vydán TrueNAS SCALE 24.04 “Dragonfish”. Přehled novinek této open source storage platformy postavené na Debianu v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 13:44 | IT novinky

    Oznámeny byly nové Raspberry Pi Compute Module 4S. Vedle původní 1 GB varianty jsou nově k dispozici také varianty s 2 GB, 4 GB a 8 GB paměti. Compute Modules 4S mají na rozdíl od Compute Module 4 tvar a velikost Compute Module 3+ a předchozích. Lze tak provést snadný upgrade.

    Ladislav Hagara | Komentářů: 0
    včera 04:44 | Nová verze

    Po roce vývoje od vydání verze 1.24.0 byla vydána nová stabilní verze 1.26.0 webového serveru a reverzní proxy nginx (Wikipedie). Nová verze přináší řadu novinek. Podrobný přehled v souboru CHANGES-1.26.

    Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (72%)
     (9%)
     (2%)
     (17%)
    Celkem 749 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: MySQL procedúra a rekurzívne vyhľadávanie

    10.11.2016 16:08 Peter
    MySQL procedúra a rekurzívne vyhľadávanie
    Přečteno: 1572×
    Dobrý deň vám prajem. Mám 2 tabuľky:

    t1
    id | polozka
    1  | darcekova krabica
    2  | kancelarsky darcek
    3  | pero
    4  | ceruzka
    5  | tuha
    6  | voucher
    7  | obal
    
    t2
    t1_id | obsah (opäť je to odkaz na t1.id)
    1     | 2
    1     | 6
    2     | 3
    2     | 4
    4     | 5
    4     | 7
    
    Čiže máme tabuľku t1, ktorá obsahuje nejaký produkt, ktorý sa z niečoho skladá a to zloženie je definované v tabuľke t2. Čiže v tomto príklade za darčeková krabica skladá z kancelárskeho darčeka a vouchera. Ale kancelársky darček sa skladá z pera a ceruzky. A nakoniec ceruzka sa skladá z tuhy a obalu. A ja potrebujem všetky id z ktorých sa skladá nadradený produkt (v tomto príklade darčeková krabica). Predpokladám, že toto je úloha pre rekurziu a zatiaľ som stvoril takéto niečo:
    delimiter //
    
    create procedure get_product(in id int)
    
    this_proc:begin
      declare loop_begin int;
      declare recursion int;
    
      set loop_begin=0;
      set recursion=0;
    
      set @trans=(select concat("trans_", replace(uuid(), '-', '')));
    
      set @create = concat('create temporary table if not exists ', @trans, '(id int unsigned not null auto_increment primary key, data int)');
      prepare stmt from @create;
      execute stmt;
      deallocate prepare stmt;
    
      set @insert = concat('insert into ', @trans, ' select NULL, obsah from t2 where t1_id=', id);
      prepare stmt from @insert;
      execute stmt;
      deallocate prepare stmt;
    
      set @select = concat('select max(id) into @loop_end from ', @trans);
      prepare stmt from @select;
      execute stmt;
      deallocate prepare stmt;
    
    
      if(@loop_end is not null) then
        while(loop_begin<@loop_end) do
          set loop_begin=loop_begin+1;
          set @select = concat('select data into @result from ', @trans, ' where id=', loop_begin);
          prepare stmt from @select;
          execute stmt;
          deallocate prepare stmt;
          set recursion=@result;
          select recursion;
          call get_product(recursion);
        end while;
      end if;
              
    end//
    
    delimiter ;
    
    Ale táto procedúra mi končí keď sa dostane na položku ktorá už nikde neodkazuje. Čiže v tomto príklade dostanem 1,2,3.

    Vie mi s tým niekto pomôcť? Za všetky rady vám vopred veľmi pekne ďakujem.

    Řešení dotazu:


    Odpovědi

    10.11.2016 21:46 NN
    Rozbalit Rozbalit vše Re: MySQL procedúra a rekurzívne vyhľadávanie
    Domaci ukol?
    11.11.2016 09:42 Peter
    Rozbalit Rozbalit vše Re: MySQL procedúra a rekurzívne vyhľadávanie
    Nie
    18.11.2016 15:50 Georgeek | skóre: 4
    Rozbalit Rozbalit vše Re: MySQL procedúra a rekurzívne vyhľadávanie
    Mrkni na tento odstavec: The Nested Set Model.

    Je to sice jen princip, ale je to asi nejobecnější metoda pro každé SQL. Lépe to jde v PostgreSQL (SQLite, t-SQL), protože ten implementuje standard SQL99, který to umožňuje vyjádřit lépe a efektivněji.
    Josef Kufner avatar 21.11.2016 18:30 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: MySQL procedúra a rekurzívne vyhľadávanie
    Případně na totéž na Wikipedii.

    Ve výsledku bude stačit jeden jednoduchý select na získání celého podstromu.

    Pro snadnější renderování a opravy left/right indexů doporučuju držet parent ID jako primární údaj. Left/right pak dopočítáš (pomalým) rekurzivním algoritmem. Může se snadno stát, že updaty uděláš blbě a strom se rozsype (parent ID tě pak zachrání). Pro snadnost renderování nabídek doporučuju ještě dopočítávat hloubku ve stromu. Vystačíš si pak s jednoduchým nerekurzivním algoritmem, který ze selectu udělá stromové menu (hloubka se hodí hlavně na zavírání tagů). Tedy v databázi budeš mít uživatelem editované sloupečky id a parent_id. A pak tam budeš mít vypočítávané sloupečky tree_left, tree_right, tree_depth. Případně ještě můžeš přidat tree_root_id, pokud máš mnoho malých stromů (pro rychlejší updaty).
    Hello world ! Segmentation fault (core dumped)

    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.