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 12:44 | Komunita

Nadace Cloud Native Computing Foundation (CNCF), jejíž cílem je usnadnit spolupráci při vývoji a zavádění nových cloudových technologií, projekt konsorcia Linux Foundation, organizovala od 10. do 13. prosince v Seattlu konferenci KubeCon + CloudNativeCon North America 2018. Shrnutí dění na konferenci v příspěvku na blogu. V úvodu konference společnost Red Hat věnovala této nadaci distribuovanou key-value databázi etcd. Jedná se o

… více »
Ladislav Hagara | Komentářů: 0
14.12. 14:33 | Nová verze

Byla vydána nová verze 1.30 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í.

Ladislav Hagara | Komentářů: 2
14.12. 14:22 | Nová verze

Deset dnů po představení beta verze byla vydána stabilní verze Steam Linku pro Raspberry Pi umožňující streamovat hry ve službě Steam z počítače na televizní obrazovku.

Ladislav Hagara | Komentářů: 8
13.12. 20:00 | Nová verze

Byla vydána (YouTube) verze 2018.3 multiplatformního herního enginu Unity (Wikipedie). Přehled novinek i s videoukázkami v příspěvku na blogu a v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
13.12. 19:33 | Nová verze

Byla vydána verze 18.12.0 KDE Aplikací (KDE Applications). Přehled novinek v kompletním seznamu změn a na stránce s dalšími informacemi. Správce souborů Dolphin umí nově například zobrazovat náhledy dokumentů vytvořených v LibreOffice a aplikací ve formátu AppImage. Konsole plně podporuje obrázkové znaky emoji. V Okularu lze k pdf souborům přidávat poznámky.

Ladislav Hagara | Komentářů: 12
13.12. 17:11 | Nová verze

Byla vydána nová stabilní verze 2.2 (2.2.1388.34) webového prohlížeče Vivaldi (Wikipedie). Z novinek vývojáři zdůrazňují například vylepšení správy listů - vybrané listy lze uložit jako relaci, možnost zobrazení klávesových zkratek určených webovou stránkou nebo možnost přehrávání videí v režimu obrazu v obraze. Nejnovější Vivaldi je postaveno na Chromiu 71.0.3578.85.

Ladislav Hagara | Komentářů: 8
13.12. 14:22 | Nová verze

Po 4 měsících vývoje od vydání verze 3.0.0 byla vydána nová verze 3.1.0 otevřeného emulátoru procesorů a virtualizačního nástroje QEMU (Wikipedie). Přispělo 189 vývojářů. Provedeno bylo více než 1 900 commitů. Přehled úprav a nových vlastností v seznamu změn.

Ladislav Hagara | Komentářů: 0
13.12. 01:32 | Nová verze

Letos bylo v komunitě Mageia hodně změn. Po volbě nových vedoucích přišla velká aktualizace a krátce na to udržovací verze 6.1. 7.12., dle plánu, vyšla Mageia s číslem 7 v její první beta verzi. Chyby můžete hlásit v bugzille. Chyby v českých překladech pak na fóru české komunity.

Joelp | Komentářů: 3
13.12. 00:11 | Zajímavý projekt

Kvůli rychlejšímu vývojovému cyklu byla přemístěna Cinelerra-gg. Cinelerra-gg je fork Cinelerry-hv. Některé rozdíly forků popisuje sám hlavní vývojář William Morrow (aka GoodGuy). Není zde popsán i fork Lumiera, zřejmě kvůli zatím nepoužitelnému stavu.

… více »
D81 | Komentářů: 3
12.12. 19:11 | Nová verze

Do aplikace pro instant messaging Telegram (Wikipedie) lze nově nahrát češtinu. Více v příspěvku na blogu Telegramu.

Ladislav Hagara | Komentářů: 7
Chystáte se přejít na Wayland na „desktopu“?
 (24%)
 (8%)
 (12%)
 (31%)
 (26%)
Celkem 133 hlasů
 Komentářů: 19, poslední 14.12. 18:37
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: 1473×
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: 68
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.