Autor Zpráva
Sitole
Profil
Dobrý den, snažím se o propojení více, konkrétně tří tabulek, které jsou mezi sebou navzájem propojené.

app_forums


app_threads


app_posts


Prozatím jsem vytvořil příkaz
SELECT
    app_forums.name,
    
    MAX(app_threads.name) AS last_post_name,
    MAX(app_threads.id) AS last_post_id,
    
    COUNT(app_posts.id) AS posts,
    COUNT(app_threads.id) AS threads
    
FROM app_forums

LEFT JOIN (
    app_threads LEFT JOIN app_posts ON app_threads.id = app_posts.thread
)
ON app_forums.id = app_threads.forum

GROUP BY app_forums.id

se kterým jsem spokojený, protože počet příspěvků "posts" vrací správně, ale vrací vždy stejnou hodnotu "threads" vrací stejnou jako "posts". Už jsem tak nějak pochopil, že to dělá LEFT JOIN, který vrací i řádky s hodnothou NULL, ale nevím jak se toho zbavit. Výsledek toho dotazu:
Keeehi
Profil
Nejsem si tím úplně jistý, ale distinct by mělo pomoct.
COUNT(DISTINCT app_threads.id) AS threads

On totiž každý řádek výsledku (jeden příspěvek) má u sebe uvedené, z kterého vlákna je. A když to jen spočítáš, dostaneš počet řádků (což je počet příspěvků). Tebe ale zajímá počet unikátních hodnot. A tu unikátnost zajistí právě to distinct. To vyfiltruje duplicitní hodnoty, tudíž každé vlákno je tam maximálně jednou a pak už se jen spočítají.
Sitole
Profil
Keeehi:
Mockrát děkuji, to je přesně to co jsem hledal.
Ani jsem nevěděl že funkce COUNT má nějaké parametry, které ovlivní její výstup.

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:

0