Autor Zpráva
caspern
Profil *
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 *
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
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 *
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)

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: