Avatar
martinkobelka
Redaktor
Avatar
martinkobelka:

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 Čápka
Tým ITnetwork
Avatar
Odpovídá na martinkobelka
David Čápka:

Nejjednodušší je použití rekurze.

BTW psal jsem ti mail :)

Nahoru Odpovědět 22.8.2012 16:01
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na martinkobelka
Kit:

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
Redaktor
Avatar
albertpatera:

jak se dela stromava databaze?

 
Nahoru Odpovědět 23.8.2012 18:20
Avatar
Kit
Redaktor
Avatar
Odpovídá na albertpatera
Kit:

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
Redaktor
Avatar
martinkobelka:

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 Čápka
Tým ITnetwork
Avatar
Odpovídá na martinkobelka
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

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 Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
martinkobelka
Redaktor
Avatar
martinkobelka:

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
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na martinkobelka
Drahomír Hanák:

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
Redaktor
Avatar
Odpovídá na Drahomír Hanák
martinkobelka:

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
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na martinkobelka
Drahomír Hanák:

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
Redaktor
Avatar
Odpovídá na Drahomír Hanák
Kit:

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
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na Kit
Drahomír Hanák:

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
Redaktor
Avatar
Odpovídá na Drahomír Hanák
Kit:

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.