Sumowanie kolumn z dwóch tabel

0

Dzień dobry, jestem zielony w tym temacie albo kod który mam powoduje, że głupieje.

Stworzyłem ranking, który pobiera dane z dwóch tabel. Z tabeli zwanej _verein pobiera id klubu, punkty, bramki itp zaś z tabeli _liga pobiera dane z kolumny land.

public function getTemplateParameters() {
        
        $columns = array(

            'C.id' => 'id',
            'C.name' => 'name',
            'L.land' => 'league_name',
            'C.sa_punkte' => 'score',
            'C.sa_tore' => 'goals',
            'C.sa_gegentore' => 'goals_received',
            '(C.sa_tore - C.sa_gegentore)' => 'goals_diff',
            'C.sa_siege' => 'wins',
            'C.sa_niederlagen' => 'defeats',
            'C.sa_unentschieden' => 'draws',
            'C.sa_spiele' => 'matches',
            'C.nationalteam' => 'nationalteam',
            
                
            'C.bild' => 'picture',
            
            'U.id' => 'user_id',
            'U.nick' => 'user_name',
            'U.email' => 'user_email',
            'U.picture' => 'user_picture'

        );
        $fromTable = $this->_websoccer->getConfig('db_prefix') . '_verein AS C';
        $fromTable .= ' LEFT JOIN ' . $this->_websoccer->getConfig('db_prefix') . '_user AS U ON U.id = C.user_id';
        $fromTable .= ' INNER JOIN ' . $this->_websoccer->getConfig('db_prefix') . '_liga AS L ON C.liga_id = L.id';
        
        
        
        $whereCondition = 'nationalteam = \'0\' AND sa_punkte > 0 ORDER BY score DESC, goals_diff DESC, wins DESC, draws DESC, goals DESC, name ASC';
        $result = $this->_db->querySelect($columns, $fromTable, $whereCondition);
        while ($team = $result->fetch_array()) {
            $teams[] = $team;
        }
        $result->free();

        
        return array("teams" => $teams);
    } 

Taki jest kod wyjściowy.

W tym momencie pokazuje mi się lista wszystkich klubów, które nie są reprezentacją.

sum pkt country.png

Jak zrobić aby punkty klubów, które mają taką samą wartość kolumny "land" sumowało?

1

W czystym SQL / MySQL:

group by L,land

ale w tym potworze ciężko powiedzieć ...

0

A to nie przeszkadza, że kolumna score jest z innej tabeli a land z innej?

@hipekk dzięki! Pomocny link 👍

Czyli w zasadzie wystarczy dodać GROUP BY L.land ?

A kolumny 'land' nie będzie przypadkiem szukać tylko w tabeli _verein?

0

Czyli w zasadzie wystarczy dodać GROUP BY L.land ?

Nie, nie wystarczy. Tak jak wcześniej napisałem potrzebujesz też SUM()

Kolumn "szuka" we wszystkich tabelach (czyli tej z FROM i tej z JOINów).
A jeżeli nazwa kolumny się powtarza w kilku tabelach trzeba określić z jakiej tabeli ma korzystać.
Można użyć aliasów które masz nadane.
Np. jeżeli z tabeli _liga chcemy wziąć dane z kolumny wynik (wymyślam) to (korzystając z tego, że w zapytaniu masz _liga AS L można napisać: L.wynik.

0

No właśnie chcę wyciągnąć dane z tabeli _verein a pogrupowane po land z tabeli _liga

Bo jak na screenie kraj to kolumna land z tabeli _liga, reszta danych wyciągana jest z _verein co z resztą widać.

SUM ale czego? SUM(sa_tore) - to bramki GROUP by L.land? Ale sa_tore to kolumna z tabeli _verein a land _liga.

Ok, zadziałało.

Dodałem SUM(sa_punkte) => 'points'

a w whereCondition dodałem Group by L.land i działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1