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 |
#3 · Zasláno: 3. 12. 2017, 15:38:51
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. |
||
Časová prodleva: 6 let
|
0