Autor | Zpráva | ||
---|---|---|---|
caspern Profil * |
#1 · Zasláno: 13. 3. 2009, 16:46:55
Dobrý den, potřebuji udělat výpis 5ti posledních komentářů z guestbooku, u tohoto Guestbooku mám však možnost odpovědi na jiný (nadřazený) příspěvek (nikoli na odpověď - takže možnost odpovídat jen na hlavní příspěvky, ne už na jejich odpovědi). Toto jsem řešil sloupcem v tabulce odpoved_na kde vkládám hodnotu id komentáře ke kterému se odpověd vztahuje.
Pro názornost: Komentář (id=1) -> odpověď (odpoved_na=1) -> odpověď (odpoved_na=1) Zde když nadřazenému komentáři nastavím (zobrazeno=0) se mi odpovědi pod tímto komentářem ve výpisu nezobrazí protože jsem to řešil dvěma selectama: $query_komentare = mysql_query("SELECT * FROM komentare WHERE zobrazeno != '0' AND clanek_url='".$_GET['url']."' AND odpoved_na='0' ORDER BY id DESC "); while($data_k = mysql_fetch_array($query_komentare)) { //výpis nadřazeného komentáře $query_komentare_odpovedi = mysql_query("SELECT * FROM komentare WHERE zobrazeno != '0' AND clanek_url='".$_GET['url']."' AND odpoved_na='".$data_k['id']."' ORDER BY id ASC "); while($data_o = mysql_fetch_array($query_komentare_odpovedi)) { //výpis obsahu odpovědi } } ovšem pokud použiji onen výpis posledních komentářů pomocí jednoduchého selectu: $query_posledni_komenty = mysql_query("SELECT * FROM komentare WHERE zobrazeno != '0' ORDER BY id DESC LIMIT 5 "); while($data = mysql_fetch_array($query_posledni_komenty)) { //výpis obsahu komentů } tak se zde vypíšou i podřazené odpovědi ke komentáři který má nastavený zobrazeno=0, napadlo mě k WHERE ještě přidat poddotaz, ale všechny mé poddotazy nebyli funkční, proto bych rád kdyby někdo věděl jak tento poddotaz zkonstruovat popřípadě jak tento problém řešit jinak. V podstatě je třeby vybrat takové záznamy kde vyberu odpoved_na, k němu vyberu příslušný id a zjistím jestli u tohoto záznamu je zobrazeno = 0, pokud ano, prvnotní záznam nezobrazím. |
||
Kajman_ Profil * |
#2 · Zasláno: 13. 3. 2009, 17:40:46
Co jen jednoduše při nastavovaní zobrazeno=0 nastavit to samé i podřazeným komentářům. Můžete oboje v rámci jednoho update. Ještě by bylo třeba kontrolovat při insertech, aby měl potomek stejné zobrazeno jako nadřazený.
Selectem to taky půjde, ale je to škoda výkonu. |
||
Casper Profil |
#3 · Zasláno: 13. 3. 2009, 17:48:06
Ano toto řešení mě napadlo, ovšem při opětovném nastavení zobrazeno=1 by se muselo totéž nastavit u všech odpovědí. To sice není problém, ovšem i tak bych rád pochopil poddotazy a řešení přes ně :)
|
||
Kajman_ Profil * |
#4 · Zasláno: 13. 3. 2009, 18:07:41
Tak mrkněte na příkaz join.
SELECT k.* FROM komentare k LEFT JOIN komentare h on (k.odpoved_na=h.id) WHERE k.zobrazeno!=0 and (k.odpoved_na=0 or ifnull(h.zobrazeno,0)!=0) |
||
Časová prodleva: 15 let
|
0