Autor | Zpráva | ||
---|---|---|---|
maxx Profil * |
#1 · Zasláno: 19. 8. 2009, 14:25:35
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 * |
#2 · Zasláno: 19. 8. 2009, 14:46:53
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 |
||
Časová prodleva: 7 dní
|
|||
gregi Profil * |
#3 · Zasláno: 26. 8. 2009, 10:27:24
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 * |
#4 · Zasláno: 26. 8. 2009, 11:26:58
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 * |
#5 · Zasláno: 26. 8. 2009, 17:15:09
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 * |
#6 · Zasláno: 27. 8. 2009, 10:32:46
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 * |
#7 · Zasláno: 27. 8. 2009, 11:36:47
Ano, přesně tak.
|
||
Kajman_ Profil * |
#8 · Zasláno: 27. 8. 2009, 12:12:30
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 |
||
Časová prodleva: 15 let
|
0