Diskuze: stromová diskuse
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 16 zpráv z 16.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Nejjednodušší je použití rekurze.
BTW psal jsem ti mail
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.
jak se dela stromava databaze?
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é.
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?
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.
Ono je to ještě jednodušší. Stačí udělat jen první polovinu toho, co jsi napsal. O druhou polovinu se postará rekurzívní šablona.
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.
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++;
}
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
Já jsem si myslel, že už alespoň trochu programovat umím, a přitom vůbec nevím nic o xslt nebo pdo
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.
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.
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?
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.
Zobrazeno 16 zpráv z 16.