IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
martinkobelka
Tvůrce
Avatar
martinkobelka:22.8.2012 15:30

Zdravím
V php se snažím udělat stromovou diskusi už docela dlouho, ale marně. Nemáte někdo odkazy na fungující scripty ke stažení, které bych mohl prozkoumat?

Zaseknu se už při návrhu tabulky v databázi. Mám např
id | predmet | obsah | email | re
1 | ahoj | líbí se mi tu | a@b.cz | 0
2 | nelibi | jak se ti tu muze libit? | b@a.cz | 1

Jak bych to měl předělat?

 
Odpovědět
22.8.2012 15:30
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na martinkobelka
David Hartinger:22.8.2012 16:01

Nejjednodušší je použití rekurze.

BTW psal jsem ti mail :)

Nahoru Odpovědět
22.8.2012 16:01
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na martinkobelka
Kit:22.8.2012 19:46

Nedávno jsem něco podobného dělal v PHP. Mělo to jen asi 17 řádek, zkusím to někde vyhrabat.

Struktura byla jednoduchá: id, parent_id, tema_id, text. Z databáze se to tahalo jedním dotazem.

Nahoru Odpovědět
22.8.2012 19:46
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
albertpatera
Tvůrce
Avatar
albertpatera:23.8.2012 18:20

jak se dela stromava databaze?

 
Nahoru Odpovědět
23.8.2012 18:20
Avatar
Kit
Tvůrce
Avatar
Odpovídá na albertpatera
Kit:23.8.2012 18:27

Primitivní způsob je, že u každého záznamu máš id na rodiče. Má to nevýhodu v tom, že z relační databáze téměř nelze takový strom získat jedním SQL dotazem. Mně se to podařilo, i když to má jisté omezení a musím ten strom dodělávat v PHP. Ale je to rychlé a pro diskuzi použitelné.

Nahoru Odpovědět
23.8.2012 18:27
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
martinkobelka
Tvůrce
Avatar
martinkobelka:24.8.2012 15:27

To se nedá. Už 2 dny nad tím přemýšlím. Zatím jsem jen slepil 7 vnořených cyklů, které trvají 20 vteřin a stejně na půl nefungují. Opravdu někdo nemáte fungující hotový script?

 
Nahoru Odpovědět
24.8.2012 15:27
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na martinkobelka
David Hartinger:24.8.2012 20:12

Ale dá, naopak je to docela jednoduché. Osobně bych si načetl vše do slovníku jedním dotazem a potom si do druhého namapoval jen ty záznamy, na které nikdo neodpovídá. Následně bych rekurzivně volal fci vypis_zaznam, která by se volala s parametrem id záznamu. Pokud by tam byla odpověď, vytáhla by se z toho 1. seznamu a tak dále.

Nahoru Odpovědět
24.8.2012 20:12
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:24.8.2012 20:15

Ono je to ještě jednodušší. Stačí udělat jen první polovinu toho, co jsi napsal. O druhou polovinu se postará rekurzívní šablona.

Nahoru Odpovědět
24.8.2012 20:15
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:24.8.2012 20:19

Jo, ten druhý je zbytečný. Udělal bych fci, co mi vrátí ty komenty, které odpovídají na určité id, a tu pak volal zas na ten výsledek a tak dále. poprvé bych jí dal jako parametr null nebo 0 nebo cokoli co by tam bylo bez odpovědi.

Nahoru Odpovědět
24.8.2012 20:19
New kid back on the block with a R.I.P
Avatar
martinkobelka
Tvůrce
Avatar
martinkobelka:25.8.2012 14:06

tak zatím mám tohle :`

$dotaz = mysql_query("select * from vzkazy");
           $data = array();
           while($vypis = mysql_fetch_array($dotaz)){
               $data[] = $vypis;
           }
           $uroven = 0;
           $rodic = 1;
           $podminka = 1;
           while($podminka < mysql_result(mysql_query("select count(*) from vzkazy where rodic = 0"), 0) + 1){
               foreach($data as $vypis){
                   if(($vypis['id'] == $rodic) and $vypis['rodic'] == 0){
                       echo $vypis['obsah']."<br>";
                       while()
                   }
               }
               $rodic++;
               $podminka++;
           }
 
Nahoru Odpovědět
25.8.2012 14:06
Avatar
Odpovídá na martinkobelka
Drahomír Hanák:25.8.2012 14:12

Kit teď publikoval článek, tak se na to podívej. http://www.itnetwork.cz/…y-z-databaze Navíc bych nepoužívám funkce mysql_* I oficiální dokumentace už to nedoporučuje (nabízí alternativy MySQLi a PDO). Tady si o tom můžeš přečíst víc http://www.itnetwork.cz/…sql-databazi

 
Nahoru Odpovědět
25.8.2012 14:12
Avatar
martinkobelka
Tvůrce
Avatar
Odpovídá na Drahomír Hanák
martinkobelka:25.8.2012 14:28

Já jsem si myslel, že už alespoň trochu programovat umím, a přitom vůbec nevím nic o xslt nebo pdo

 
Nahoru Odpovědět
25.8.2012 14:28
Avatar
Odpovídá na martinkobelka
Drahomír Hanák:25.8.2012 14:37

XSLT není přímo nutnost. Nicméně je to pěkný šablonovací systém. PDO také není nutné, ale doporučuji ti ho použít. Výhody jsou zmíněny v daných článcích.

 
Nahoru Odpovědět
25.8.2012 14:37
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Drahomír Hanák
Kit:25.8.2012 18:55

XSLT má hlavně výhodu, že dokáže generovat výstup přímo ze stromu třídy DOMdocument. To přináší vysokou rychlost i pro rozsáhlé výstupy.

Nahoru Odpovědět
25.8.2012 18:55
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Drahomír Hanák:25.8.2012 19:23

Jo, to jsem se díval :) Mně se to XSLT dost líbí (třeba ty rekurzivní šablony), akorát teď používám Nette a tam už jsou Latte šablony (takové lepší Smarty řekl bych). Ne že by to nešlo zaměnit, ale zatím mi Latte stačilo. I ta rychlost zatím vyhovuje. I když XSLT má nejspíš víc funkcí a asi je taky i rychlejší. Doporučoval bys to i pro menší weby, jako je klasický blog a tak, nebo je to spíš pro větší aplikace?

 
Nahoru Odpovědět
25.8.2012 19:23
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Drahomír Hanák
Kit:25.8.2012 19:45

XSLT je podle mého měření asi 10× rychlejší, než Smarty, ale pro delší výstupy ten rozdíl nemusí být tak markantní. XSLT je úplný programovací jazyk. Doporučil bych ho pro všechny weby, u kterých máš potřebu samostatné šablony v externím souboru či databázi. Tedy i pro klasický blog, viz můj dnešní článek
http://www.itnetwork.cz/…y-z-databaze

Podstatným negativem je, že se obtížněji učí, než programovací jazyky, na které jsme si už zvykli. Pro někoho může být negativem, že někdy odmítne zpracovat nevalidní dokument. Na druhou stranu je to dobře.

Nahoru Odpovědět
25.8.2012 19:45
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 16 zpráv z 16.