Autor Zpráva
maxx
Profil *
Zdravim. Mám následující tabulky:
forum (id,nazev)
forum_topics (id,forum_id,nazev)
forum_posts (id,topic_id,nazev,text)
Pro výpis používám následující dotaz:
	SELECT f.*, u.nick,
	count(t.forum_id) pocet_temat
	FROM forum f
	LEFT JOIN forum_topics t ON f.id=t.forum_id
	LEFT JOIN uzivatele u ON f.last_autor=u.id
	GROUP BY f.id
	ORDER BY f.poradi ASC

Mám tam spočítání počtu témat, jak je vidět. Ale dá se do toho nějak zakomponovat i počet příspěvků, který se vážou na to hlavní téma? Díky za pomoc
Kajman_
Profil *
Dá, ale často se z výkonostního důvodu tento počet průběžně předpočítává.

SELECT f.*,
    count(distinct t.id) pocet_temat,
    count(p.id) pocet_prispevku
    FROM forum f
    LEFT JOIN forum_topics t ON f.id=t.forum_id
    LEFT JOIN forum_posts p ON t.id=p.topic_id
    GROUP BY f.id
    ORDER BY f.poradi ASC
    
gregi
Profil *
Ještě bych měl dotaz. Mám tento výpis:
(
				SELECT
				t.nazev nazev, p.datum datum, p.autor autor, p.text text, p.topic_id id, u.nick, count(p.topic_id) pocet_prispevku
				FROM forum_posts p
				LEFT JOIN forum_topics t ON t.id=p.topic_id
				LEFT JOIN uzivatele u ON u.id=p.autor
				GROUP BY t.id 
				) 
				UNION (
				SELECT
				t.nazev, t.datum, t.autor, t.text, t.id, u.nick, count(p.topic_id) pocet_prispevku
				FROM forum_topics t
				LEFT JOIN uzivatele u ON u.id=t.autor 
				LEFT JOIN forum_posts p ON t.id=p.topic_id
				GROUP BY t.id
				)
				ORDER BY datum DESC
				LIMIT 11

Ovšem nevím jak správně formulovat GROUP BY, protože teď mi nevypíše všechny příspěvky správně. Díky za pomoc
Kajman_
Profil *
Není to tím, že v p.neco může být libovolný řádek? Nechcete např. poslední? To by pak bylo řešení ve faq.
gregi
Profil *
Teď nerozumim, jak libovolný řádek? Já potřebuju vypsat jak témata, tak jejich příspěvky. Posledních 11. Pokud ten dotaz mam takto:
(
                SELECT
                t.nazev nazev, p.datum datum, p.autor autor, p.text text, p.topic_id id, u.nick
                FROM forum_posts p
                LEFT JOIN forum_topics t ON t.id=p.topic_id
                LEFT JOIN uzivatele u ON u.id=p.autor
                ) 
                UNION (
                SELECT
                t.nazev, t.datum, t.autor, t.text, t.id, u.nick
                FROM forum_topics t
                LEFT JOIN uzivatele u ON u.id=t.autor 
                LEFT JOIN forum_posts p ON t.id=p.topic_id
                )
                ORDER BY datum DESC
                LIMIT 11

Bez count() a GROUP BY, tak to vypisuje všechno správně, ale já bych tam potřeboval ještě zakomponovat správně ty počet příspěvků u jednotlivého tématu.
Kajman_
Profil *
Tedy klidně i 11 posledních příspěvku ze stejného tématu? A v tom případě k tomu 11x stejné číslo?
gregi
Profil *
Ano, přesně tak.
Kajman_
Profil *
V tomto konkrétním případě, by se asi mohlo šáhnout po korelovaném poddotazu.

select tmp.*,
       (select count(*) from forum_posts p where p.topic_id = tmp.id) pocet
from   (( select t.nazev nazev,
								 p.datum datum,
								 p.autor autor,
								 p.text text,
								 p.topic_id id,
								 u.nick
					from   forum_posts p
					left   join forum_topics t on t.id = p.topic_id
					left   join uzivatele u on u.id = p.autor
					order  by datum desc limit 11
				)
        union
				(
					select t.nazev, t.datum, t.autor, t.text, t.id, u.nick
					from   forum_topics t
					left   join uzivatele u on u.id = t.autor
					left   join forum_posts p on t.id = p.topic_id
					order  by datum desc
					limit 11
				)
        order  by datum desc
				limit 11) tmp

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: