1 (edited by Ramex 2008-10-07 00:42:58)

Topic: COUNT() iš skirtingų lentelių

na situacija tokia:
iš vienos lentelės traukiu duomenis, kelis laukelius, bet žinau, kad bus pažymėta tik viena eilutė, ir skaičiuoju su šiuo įrašu susijusius duomenis kituose lentelėse. ur bėda ta, kad nesvarbu kiek kitose lentelėse įrašų, visur COUNT() atsakymas būna lygus pirmos lentelės rezultatams. ar čia aš nemoku kažko, ar čia taip yra ir nieko nepakeisi.
viską darau taip:

                SELECT 
                    t1.id AS id,
                    t1.name AS name, 
                    t1.description AS description, 
                    AVG(t3.result) AS vote, 
                    COUNT(t3.result) AS counter, 
                    COUNT(t2.id) AS comments, 
                    COUNT(t4.id) AS materials
                FROM cms_games AS t1
                LEFT JOIN cms_games_comments AS t2 
                    ON t2.game_id=t1.id
                LEFT JOIN cms_games_votes AS t3
                    ON t3.game_id=t1.id
                LEFT JOIN cms_games_materials AS t4
                    ON t4.game_id=t1.id
                WHERE t1.id=$id 
                GROUP BY t1.id

t.y. jei 'counter' rezultatas yra 5,  tai tiek pat būna ir 'comments', ir 'materials'...
$id gaunu iš išorės

Su sąlyga, kad šūdo nebus...

Re: COUNT() iš skirtingų lentelių

Na nematant duomenų (rezultatų) sunku pasakyti, koks turėtų būti sprendimas. Faktas tas, kad COUNT(stulpelio_pav) skaičiuoja kiek tarp rezultatų yra reikšmių nelygių NULL. Tavo atveju galbūt tiktų COUNT(DISTINCT stulpelio_pav), bet nematant duomenų sunku atspėt (-;

3 (edited by Ramex 2008-10-08 20:15:13)

Re: COUNT() iš skirtingų lentelių

DISTINCT išsprendė bėdą =] gal galėtum plačiau paaiškint apie tai. pirmoj lentelėj paselektinama viena eilutė, priklausomai nuo id. toliau kitose lentelėse yra item_id, kuris gali būti lygus pirmos lentelės id. taigi kitose lentelėse ir skaičiuojama kiek įrašų yra su tuo minėtu id. ir ištikro buvo taip, kad visi count rezultatai būdavo jų visų sandauga, .t.y jei counter=3, comments=2, materials=2, tai tuomet man grąžindavo counter=comments=materials=12.

Su sąlyga, kad šūdo nebus...