Przejdź do zawartości

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

Z Encyklopedia Poznanskiego Sportu
Nie podano opisu zmian
Nie podano opisu zmian
 
(Nie pokazano 7 pośrednich wersji utworzonych przez tego samego użytkownika)
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 wybranym sezonie
-- są wyróżniani pogrubieniem.
-- =========================================================
-- =========================================================


Linia 28: Linia 32:


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


Linia 34: Linia 38:
         mw.text.trim(
         mw.text.trim(
             frame.args.druzyna or ""
             frame.args.druzyna or ""
        )
    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
     -- FUNKCJA LICZBOWA
     -- =====================================================
     -- =====================================================


     local fields = table.concat({
     local function liczba(value)
 
        return
            tonumber(value or 0)
            or 0
 
    end
 
 
    -- =====================================================
    -- USTALENIE SEZONU WYRÓŻNIENIA
    -- =====================================================
 
    local sezonWyroznienia = ""
    local znalezionoBiezacy = false
 
 
    -- -----------------------------------------------------
    -- Najpierw sprawdzamy sezon podany przez użytkownika
    -- -----------------------------------------------------
 
    if sezonSQL ~= "" then
 
        local sprawdzenieSezonu =
            mw.ext.cargo.query(
                "UdzialZawodnika,Mecze",
 
                "UdzialZawodnika.zawodnik=zawodnik",
 
                {
                    join =
                        "UdzialZawodnika.mecz=Mecze.id",
 
                    where =
                        "UdzialZawodnika.druzyna='"
                        .. druzynaSQL
                        .. "'"
                        .. " AND Mecze.sezon='"
                        .. sezonSQL
                        .. "'"
                        .. " AND UdzialZawodnika.minuty > 0",
 
                    groupBy =
                        "UdzialZawodnika.zawodnik",
 
                    limit = 5000
                }
            )
 
 
        if sprawdzenieSezonu
            and #sprawdzenieSezonu > 0 then
 
            sezonWyroznienia = sezonBiezacy
            znalezionoBiezacy = true
 
        end
 
    end
 
 
    -- =====================================================
    -- JEŻELI NIE MA DANYCH DLA PODANEGO SEZONU
    -- SZUKAMY OSTATNIEGO SEZONU
    -- =====================================================
 
    if not znalezionoBiezacy then
 
        local sezony =
            mw.ext.cargo.query(
                "UdzialZawodnika,Mecze",
 
                "Mecze.sezon=sezon",


        "UdzialZawodnika.zawodnik=zawodnik",
                {
                    join =
                        "UdzialZawodnika.mecz=Mecze.id",


        "UdzialZawodnika.druzyna=druzyna",
                    where =
                        "UdzialZawodnika.druzyna='"
                        .. druzynaSQL
                        .. "'"
                        .. " AND UdzialZawodnika.minuty > 0",


        "UdzialZawodnika.mecz=mecz",
                    groupBy =
                        "Mecze.sezon",


        "UdzialZawodnika.minuty=minuty",
                    orderBy =
                        "Mecze.sezon DESC",


        "UdzialZawodnika.minuty_format=minuty_format",
                    limit = 100
                }
            )


        "UdzialZawodnika.gol=gol",


         "UdzialZawodnika.asysta=asysta",
         if sezony and #sezony > 0 then


        "UdzialZawodnika.zbiorka=zbiorka",
            sezonWyroznienia =
                mw.text.trim(
                    sezony[1].sezon or ""
                )


         "UdzialZawodnika.blok=blok"
         end


     }, ",")
     end




     -- =====================================================
     -- =====================================================
     -- ZAPYTANIE CARGO
     -- POBRANIE ŁĄCZNYCH DANYCH STATYSTYCZNYCH
     -- =====================================================
     -- =====================================================


     local args = {
     local fields = table.concat({
 
        "UdzialZawodnika.zawodnik=zawodnik",
 
        "COUNT(UdzialZawodnika.mecz)=mecze",
 
        "SUM(UdzialZawodnika.gol)=punkty",
 
        "SUM(UdzialZawodnika.minuty)=minuty",
 
        "SUM(UdzialZawodnika.asysta)=asysty",
 
        "SUM(UdzialZawodnika.zbiorka)=zbiorki",
 
        "SUM(UdzialZawodnika.blok)=bloki"
 
    }, ",")


        where =
            "UdzialZawodnika.druzyna='"
            .. druzynaSQL
            .. "'",


        limit = 5000
    -- =====================================================
    -- WARUNEK
    -- =====================================================


     }
local where =
     "UdzialZawodnika.druzyna='"
    .. druzynaSQL
    .. "'"
    .. " AND UdzialZawodnika.minuty > 0"


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


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


Linia 115: Linia 255:


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


     end
     end
Linia 123: Linia 263:


     -- =====================================================
     -- =====================================================
     -- STRUKTURA ZAWODNIKA
     -- AKTUALNI ZAWODNICY
     -- =====================================================
     -- =====================================================


     local zawodnicy = {}
     local aktualni = {}
 
 
    if sezonWyroznienia ~= "" then
 
        local sezonAktualnySQL =
            mw.ustring.gsub(
                sezonWyroznienia,
                "'",
                "''"
            )
 


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


    -- =====================================================
                "UdzialZawodnika.zawodnik=zawodnik",
    -- NOWY REKORD ZAWODNIKA
    -- =====================================================


    local function nowyZawodnik()
                {
                    join =
                        "UdzialZawodnika.mecz=Mecze.id",


        return {
                    where =
                        "UdzialZawodnika.druzyna='"
                        .. druzynaSQL
                        .. "'"
                        .. " AND Mecze.sezon='"
                        .. sezonAktualnySQL
                        .. "'"
                        .. " AND UdzialZawodnika.minuty > 0",


            mecze = 0,
                    groupBy =
                        "UdzialZawodnika.zawodnik",


             punkty = 0,
                    limit = 5000
                }
             )


            minuty = 0,


            asysty = 0,
        if currentRows then


             zbiorki = 0,
             for _, row in ipairs(currentRows) do


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


        }


    end
                if zawodnik ~= "" then


                    aktualni[zawodnik] = true


    -- =====================================================
                end
    -- BEZPIECZNE POBIERANIE LICZBY
    -- =====================================================


    local function liczba(wartosc)
            end


         return
         end
            tonumber(wartosc or 0)
            or 0


     end
     end
Linia 168: Linia 330:


     -- =====================================================
     -- =====================================================
     -- ZLICZANIE STATYSTYK
     -- PRZYGOTOWANIE DANYCH
     -- =====================================================
     -- =====================================================
    local zawodnicy = {}


     for _, row in ipairs(rows) do
     for _, row in ipairs(rows) do
Linia 181: Linia 346:
         if zawodnik ~= "" then
         if zawodnik ~= "" then


             if not zawodnicy[zawodnik] then
             table.insert(
                zawodnicy,
                {


                zawodnicy[zawodnik] =
                    zawodnik = zawodnik,
                    nowyZawodnik()


            end
                    mecze =
                        liczba(row.mecze),


                    punkty =
                        liczba(row.punkty),


            local stat =
                    -- Cargo przechowuje minuty jako SEKUNDY
                zawodnicy[zawodnik]
                    minuty =
                        liczba(row.minuty),


                    asysty =
                        liczba(row.asysty),


            -- ---------------------------------------------
                    zbiorki =
            -- MECZE
                        liczba(row.zbiorki),
            -- ---------------------------------------------


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


                    aktualny =
                        aktualni[zawodnik] or false


            -- ---------------------------------------------
                }
            -- PUNKTY
             )
             -- ---------------------------------------------


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


    end


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


            stat.minuty =
    -- =====================================================
                stat.minuty
    -- FORMATOWANIE MINUT
                + liczba(row.minuty)
    --
    -- WAŻNE:
    -- Pole UdzialZawodnika.minuty jest zapisane w SEKUNDACH.
    --
    -- Przykład:
    -- 103775 sekund = 1729 minut 35 sekund
    --
    -- Wynik:
    -- 1729:35
    -- =====================================================


    local function formatujMinuty(sekundy)


            -- ---------------------------------------------
        local wartosc =
             -- ASYSTY
             tonumber(sekundy or 0)
             -- ---------------------------------------------
             or 0