Autor Zpráva
slon_cz
Profil
Zdravim, udelal jsem si script na komentare k clankum, ale nenapada me, jak udelat odpovedi na komentare? Respektive bude jeden komentar a pod nim odpovedi na ten dany komentar. Script si dokazu napsat sam, jen potrebuji poradit po logicke strance, jak by to melo fungovat. Děkuji
Taps
Profil
slon_cz:
musíš zachytávat id rodičovského komentáře, pro který je napsána odpověď
Keeehi
Profil
slon_cz:
Ještě záleží, zda chceš mít stromovou strukturu kde půjde komentovat cokoli, nebo jen omezenou, jako má třeba facebook, kde jsou jen dvě úrovně komentářů. ID rodičovského komentáře však budeš potřebovat tak jako tak.
slon_cz
Profil
Už teď mám v databázi u komentáře řádek, kde uložím id komentáře, ke kterému je vázaná odpověď. Bude to jen hlavni komentar -> komentare k hlavnimu komentari. Problem nastava ve vypisovani, momentalne je vypisuji podle data (nejnovejsi dole hned nad inputem pro pridani komentare), ale jak vypsat ty podkomentare k danemu komentari? To u kazdyho komentare zjistovat, zda ma komentar nejake podkomentare a pripadne je vypisovat dalsim while z databaze? To se mi zda moc "prasacky".
Kajman
Profil
Pokud budou mít hlavní komentáře ve sloupci s odkazem na rodiče null a bude jen jedna úroveň zanoření, tak můžete řadit takto.

select k.*
from komentare k left join komentare hlavni on k.id_hlavni=hlavni.id
where k.clanek_id=42
order by coalesce(hlavni.cas,k.cas), coalesce(k.id_hlavni,k.id), k.cas, k.id

Pokud ale máte postgresql nebo novější mariadb, lze to napsat obecně bez omezení úrovní a lépe. Mysql ale stromové dotazy zatím neumí.

Edit:

A pokud vždy platí, že větší id je větší čas, tak ani nemusíte tabulku linkovat...

select k.*
from komentare k
where k.clanek_id=42
order by coalesce(k.id_hlavni,k.id), k.id
slon_cz
Profil
omlouvmam se, ale nechapu ten sql prikaz, tedy pokud mam tabulku clanky_komentare, struktura autor-obsah-id_clanku-hlavni_komentar-datum-id
Kajman
Profil
Pro článek 42 by dotaz měl být
select k.*
from clanky_komentare k
where k.id_clanku=42
order by coalesce(k.hlavni_komentar,k.id), k.id

V php si pak budete kontrolovat, zda je hlavni_komentar vyplněný - v tom případě zařídíte odsazení.
slon_cz
Profil
Skvěle, toto jsem přesně hledal, jen jsem nevěděl ten sql příkaz, ještě jednou díky :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: