Topic: 3 lenteliu LEFT JOIN su GROUP BY

Turime 3 lenteles:
Forum category (id, name, order)
Forum topics (id, category, name ir t.t.)
Forum posts (id, topic, is_topic (jei iraso turinys yra ir t.t)

Reikia gauti: kategoriju pavadinimus, temu ir postu skaiciu kiekvienoje is ju.

SELECT
    FC.id,
    FC.name,
    FC.description,
    COUNT(FT.id) AS topiccount,
    COUNT(FP.id) AS postcount
FROM 
    forum_categories FC
LEFT JOIN
    forum_topics FT ON FT.category = FC.id
LEFT JOIN
    forum_posts FP ON ( FP.topic = FT.id AND is_topic = 0)
GROUP BY
    FC.id
ORDER BY
    order_,
    name DESC

Naudojant pastaraja uzklausa - tik temu skaicius paskaiciuojamas teisingai, tuo tarpu postu - duodama tas pat
Sudejus GROUP BY visus laukus, pagal kuriuos reiktu grupuot - del pasikartojancio topic id post lenteleje, irasai kartojasi

Kaip isvengiant keliu uzklausu butu galima issitraukti sia informacija?

Re: 3 lenteliu LEFT JOIN su GROUP BY

Nežinau ar teisingai čia viską pateikei. Nes pagal idėją, tai pateikta užklausa tūrėtų teisingai suskaičiuoti post'ų skaičių, o topic'ų neteisingai - nes grupuojant pagal kategorijos ID post'ų ir topic'ų skaičius vienoje kategorijoje turi būti gaunamas vienodas.

Norint suskaičiuoti, kiek kiekvinoje kategorijoje yra topic'ų, galima naudoti opertorių DISTINCT, kuris leis suskaičiuoti kiek yra unijalių topic'ų ID kiekvienoje kategorijoje:

(...)
COUNT(DISTINCT(FT.id)) AS topiccount,
(...)

Re: 3 lenteliu LEFT JOIN su GROUP BY

Na, pats perskaiciaves buvau, tai topikus rode teisingai, nes ju lentelej juk saugome kategorijos id, tuo tarpu, postu negrupuojame
Gerai, ismeginsiu jusu pasiulyta varianta, dekui
Informuosiu apie rezultatus