Przejdź do zawartości

Moduł:StatystykiHistoryczne: Różnice pomiędzy wersjami

Z Encyklopedia Poznanskiego Sportu
Nie podano opisu zmian
Nie podano opisu zmian
Linia 2: Linia 2:


-- =========================================================
-- =========================================================
-- MODUŁ: STATYSTYKISTORYCZNE
-- MODUŁ:STATYSTYKIHISTORYCZNE
--
--
-- Łączne statystyki zawodników drużyny koszykarskiej
-- Łączne statystyki zawodników ze wszystkich
-- ze wszystkich wprowadzonych sezonów.
-- wprowadzonych sezonów.
--
-- KOSZYKÓWKA
--
--
-- Tabele:
-- Tabele:
Linia 19: Linia 21:
-- {{#invoke:StatystykiHistoryczne|main
-- {{#invoke:StatystykiHistoryczne|main
-- |druzyna=Enea Basket Poznań
-- |druzyna=Enea Basket Poznań
-- |sezon_biezacy=2025/2026
-- }}
-- }}
--
--
-- Moduł jest uniwersalny dla drużyn koszykarskich.
-- Zawodnicy występujący w sezonie_biezacy są
-- wyróżniani pogrubieniem.
-- =========================================================
-- =========================================================


Linia 28: Linia 32:


     -- =====================================================
     -- =====================================================
     -- DRUŻYNA
     -- PARAMETRY
     -- =====================================================
     -- =====================================================


Linia 36: Linia 40:
         )
         )


    local sezonBiezacy =
        mw.text.trim(
            frame.args.sezon_biezacy or ""
        )
    -- =====================================================
    -- SPRAWDZENIE DRUŻYNY
    -- =====================================================


     if druzyna == "" then
     if druzyna == "" then


         return
         return
             "''Nie podano drużyny.''"
             "'''Błąd:''' nie podano parametru <code>druzyna</code>."


     end
     end
Linia 46: Linia 59:


     -- =====================================================
     -- =====================================================
     -- BEZPIECZNE PRZYGOTOWANIE NAZWY DRUŻYNY
     -- BEZPIECZNE PRZYGOTOWANIE NAZW
     -- =====================================================
     -- =====================================================


Linia 55: Linia 68:
             "''"
             "''"
         )
         )
    local sezonSQL = ""
    if sezonBiezacy ~= "" then
        sezonSQL =
            mw.ustring.gsub(
                sezonBiezacy,
                "'",
                "''"
            )
    end




     -- =====================================================
     -- =====================================================
     -- POLA POBIERANE Z CARGO
     -- POBRANIE DANYCH Z CARGO
     -- =====================================================
     -- =====================================================


Linia 65: Linia 92:
         "UdzialZawodnika.zawodnik=zawodnik",
         "UdzialZawodnika.zawodnik=zawodnik",


         "UdzialZawodnika.druzyna=druzyna",
         "COUNT(UdzialZawodnika.mecz)=mecze",
 
        "UdzialZawodnika.mecz=mecz",


         "UdzialZawodnika.minuty=minuty",
         "SUM(UdzialZawodnika.gol)=punkty",


         "UdzialZawodnika.minuty_format=minuty_format",
         "SUM(UdzialZawodnika.minuty)=minuty",


         "UdzialZawodnika.gol=gol",
         "SUM(UdzialZawodnika.asysta)=asysty",


         "UdzialZawodnika.asysta=asysta",
         "SUM(UdzialZawodnika.zbiorka)=zbiorki",


         "UdzialZawodnika.zbiorka=zbiorka",
         "SUM(UdzialZawodnika.blok)=bloki"
 
        "UdzialZawodnika.blok=blok"


     }, ",")
     }, ",")
Linia 85: Linia 108:


     -- =====================================================
     -- =====================================================
     -- ZAPYTANIE CARGO
     -- WARUNEK
     -- =====================================================
     -- =====================================================


     local args = {
     local where =
        "UdzialZawodnika.druzyna='"
        .. druzynaSQL
        .. "'"


        where =
            "UdzialZawodnika.druzyna='"
            .. druzynaSQL
            .. "'",
        limit = 5000
    }


    -- =====================================================
    -- ZAPYTANIE
    -- =====================================================


     local rows =
     local rows =
Linia 104: Linia 125:
             "UdzialZawodnika",
             "UdzialZawodnika",
             fields,
             fields,
             args
             {
                where = where,
 
                groupBy =
                    "UdzialZawodnika.zawodnik",
 
                limit = 5000
 
            }
         )
         )


Linia 115: Linia 144:


         return
         return
             "''Brak statystyk dla drużyny "
             "''Brak danych statystycznych dla drużyny "
             .. druzyna
             .. druzyna
             .. " w bazie.''"
             .. ".''"


     end
     end
Linia 123: Linia 152:


     -- =====================================================
     -- =====================================================
     -- STRUKTURA ZAWODNIKA
     -- FUNKCJA LICZBOWA
     -- =====================================================
     -- =====================================================


     local zawodnicy = {}
     local function liczba(value)


 
         return
    -- =====================================================
             tonumber(value or 0)
    -- NOWY REKORD ZAWODNIKA
             or 0
    -- =====================================================
 
    local function nowyZawodnik()
 
         return {
 
             mecze = 0,
 
            punkty = 0,
 
            minuty = 0,
 
            asysty = 0,
 
            zbiorki = 0,
 
             bloki = 0
 
        }


     end
     end
Linia 155: Linia 165:


     -- =====================================================
     -- =====================================================
     -- BEZPIECZNE POBIERANIE LICZBY
     -- SPRAWDZENIE AKTUALNYCH ZAWODNIKÓW
    --
    -- Zawodnik jest uznawany za obecnego, jeżeli ma
    -- przynajmniej jeden występ w podanym sezonie.
     -- =====================================================
     -- =====================================================


     local function liczba(wartosc)
     local aktualni = {}


        return
            tonumber(wartosc or 0)
            or 0


     end
     if sezonSQL ~= "" then


        local currentRows =
            mw.ext.cargo.query(
                "UdzialZawodnika,Mecze",


    -- =====================================================
                "UdzialZawodnika.zawodnik=zawodnik",
    -- ZLICZANIE STATYSTYK
    -- =====================================================


    for _, row in ipairs(rows) do
                {
                    join =
                        "UdzialZawodnika.mecz=Mecze.id",


        local zawodnik =
                    where =
            mw.text.trim(
                        "UdzialZawodnika.druzyna='"
                row.zawodnik or ""
                        .. druzynaSQL
            )
                        .. "'"
                        .. " AND Mecze.sezon='"
                        .. sezonSQL
                        .. "'"
                        .. " AND UdzialZawodnika.minuty > 0",


                    groupBy =
                        "UdzialZawodnika.zawodnik",


        if zawodnik ~= "" then
                    limit = 5000


             if not zawodnicy[zawodnik] then
                }
             )


                zawodnicy[zawodnik] =
                    nowyZawodnik()


            end
        if currentRows then


            for _, row in ipairs(currentRows) do


            local stat =
                local zawodnik =
                zawodnicy[zawodnik]
                    mw.text.trim(
                        row.zawodnik or ""
                    )




            -- ---------------------------------------------
                if zawodnik ~= "" then
            -- MECZE
            -- ---------------------------------------------


            stat.mecze =
                    aktualni[zawodnik] = true
                stat.mecze + 1


                end


             -- ---------------------------------------------
             end
            -- PUNKTY
            -- ---------------------------------------------


            stat.punkty =
        end
                stat.punkty
                + liczba(row.gol)


    end


            -- ---------------------------------------------
            -- MINUTY
            -- ---------------------------------------------


            stat.minuty =
    -- =====================================================
                stat.minuty
    -- PRZYGOTOWANIE DANYCH
                + liczba(row.minuty)
    -- =====================================================


    local zawodnicy = {}


            -- ---------------------------------------------
            -- ASYSTY
            -- ---------------------------------------------


            stat.asysty =
    for _, row in ipairs(rows) do
                stat.asysty
                + liczba(row.asysta)


        local zawodnik =
            mw.text.trim(
                row.zawodnik or ""
            )


            -- ---------------------------------------------
            -- ZBIÓRKI
            -- ---------------------------------------------


            stat.zbiorki =
        if zawodnik ~= "" then
                stat.zbiorki
                + liczba(row.zbiorka)


            table.insert(
                zawodnicy,
                {


            -- ---------------------------------------------
                    zawodnik = zawodnik,
            -- BLOKI
            -- ---------------------------------------------


            stat.bloki =
                    mecze =
                stat.bloki
                        liczba(row.mecze),
                + liczba(row.blok)


        end
                    punkty =
                        liczba(row.punkty),


    end
                    minuty =
                        liczba(row.minuty),


                    asysty =
                        liczba(row.asysty),


    -- =====================================================
                    zbiorki =
    -- LISTA ZAWODNIKÓW
                        liczba(row.zbiorki),
    -- =====================================================


    local lista = {}
                    bloki =
                        liczba(row.bloki),


                    aktualny =
                        aktualni[zawodnik] or false


    for zawodnik, stat in pairs(zawodnicy) do
                }
            )


         table.insert(
         end
            lista,
            {
                zawodnik = zawodnik,
                stat = stat
            }
        )


     end
     end
Linia 277: Linia 286:


         minuty =
         minuty =
             tonumber(minuty)
             math.floor(
            or 0
                tonumber(minuty or 0)
 
                or 0
            )


         local godziny =
         local godziny =
Linia 301: Linia 311:


     -- =====================================================
     -- =====================================================
     -- LINK DO STRONY ZAWODNIKA
     -- LINK DO ZAWODNIKA
     -- =====================================================
     -- =====================================================


     local function linkZawodnika(nazwa)
     local function linkZawodnika(row)
 
        local nazwa =
            row.zawodnik
 


         return
         local tekst =
             "[["
             "[["
             .. nazwa
             .. nazwa
Linia 312: Linia 326:
             .. nazwa
             .. nazwa
             .. "]]"
             .. "]]"
        -- -----------------------------------------------
        -- WYRÓŻNIENIE AKTUALNEGO ZAWODNIKA
        -- -----------------------------------------------
        if row.aktualny then
            tekst =
                "'''"
                .. tekst
                .. "'''"
        end
        return tekst


     end
     end
Linia 317: Linia 348:


     -- =====================================================
     -- =====================================================
     -- GENEROWANIE TABELI
     -- SORTOWANIE
     -- =====================================================
     -- =====================================================


     local function generujTabele(
     local funkcjeSortowania = {
         tytul,
 
         pole,
        mecze = function(a, b)
         formatWartosci
 
    )
            if a.mecze ~= b.mecze then
 
                return a.mecze > b.mecze
 
            end
 
            return a.zawodnik < b.zawodnik
 
         end,
 
 
         punkty = function(a, b)