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 8 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:
-- 1. Mecze
-- 1. Mecze
-- 2. Punkty
-- 2. Punkty
-- 3. Asysty
-- 3. Minuty
-- 4. Zbiórki
-- 4. Asysty
-- 5. Bloki
-- 5. Zbiórki
-- 6. Minuty
-- 6. Bloki
--
--
-- Użycie:
-- Użycie:
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.
-- =========================================================
-- =========================================================


-- =========================================================
-- GŁÓWNA FUNKCJA
-- =========================================================


function p.main(frame)
function p.main(frame)


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


     local druzyna =
     local druzyna =
         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




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


     local druzynaSQL =
     local druzynaSQL =
Linia 59: Linia 68:
             "''"
             "''"
         )
         )
    local sezonSQL = ""
    if sezonBiezacy ~= "" then
        sezonSQL =
            mw.ustring.gsub(
                sezonBiezacy,
                "'",
                "''"
            )
    end
    -- =====================================================
    -- FUNKCJA LICZBOWA
    -- =====================================================
    local function liczba(value)
        return
            tonumber(value or 0)
            or 0
    end




     -- =====================================================
     -- =====================================================
     -- POLA CARGO
     -- USTALENIE SEZONU WYRÓŻNIENIA
     -- =====================================================
     -- =====================================================


     local fields = table.concat({
     local sezonWyroznienia = ""
    local znalezionoBiezacy = false
 
 
    -- -----------------------------------------------------
    -- Najpierw sprawdzamy sezon podany przez użytkownika
    -- -----------------------------------------------------
 
    if sezonSQL ~= "" then


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


        "UdzialZawodnika.druzyna=druzyna",
                "UdzialZawodnika.zawodnik=zawodnik",


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


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


        "UdzialZawodnika.minuty_format=minuty_format",
                    groupBy =
                        "UdzialZawodnika.zawodnik",


        "UdzialZawodnika.gol=gol",
                    limit = 5000
                }
            )


        "UdzialZawodnika.asysta=asysta",


         "UdzialZawodnika.zbiorka=zbiorka",
         if sprawdzenieSezonu
            and #sprawdzenieSezonu > 0 then


         "UdzialZawodnika.blok=blok"
            sezonWyroznienia = sezonBiezacy
            znalezionoBiezacy = true
 
         end


     }, ",")
     end




     -- =====================================================
     -- =====================================================
     -- ZAPYTANIE CARGO
     -- JEŻELI NIE MA DANYCH DLA PODANEGO SEZONU
    -- SZUKAMY OSTATNIEGO SEZONU
     -- =====================================================
     -- =====================================================


     local args = {
     if not znalezionoBiezacy then


         where =
         local sezony =
             "UdzialZawodnika.druzyna='"
             mw.ext.cargo.query(
            .. druzynaSQL
                "UdzialZawodnika,Mecze",
            .. "'",


        limit = 5000
                "Mecze.sezon=sezon",


    }
                {
                    join =
                        "UdzialZawodnika.mecz=Mecze.id",
 
                    where =
                        "UdzialZawodnika.druzyna='"
                        .. druzynaSQL
                        .. "'"
                        .. " AND UdzialZawodnika.minuty > 0",
 
                    groupBy =
                        "Mecze.sezon",


                    orderBy =
                        "Mecze.sezon DESC",


    local rows =
                    limit = 100
        mw.ext.cargo.query(
                }
             "UdzialZawodnika",
             )
            fields,
            args
        )




    -- =====================================================
        if sezony and #sezony > 0 then
    -- BRAK DANYCH
    -- =====================================================


    if not rows or #rows == 0 then
            sezonWyroznienia =
                mw.text.trim(
                    sezony[1].sezon or ""
                )


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


     end
     end
Linia 127: Linia 196:


     -- =====================================================
     -- =====================================================
     -- STRUKTURA ZAWODNIKA
     -- POBRANIE ŁĄCZNYCH DANYCH STATYSTYCZNYCH
     -- =====================================================
     -- =====================================================


     local zawodnicy = {}
     local fields = table.concat({
 
        "UdzialZawodnika.zawodnik=zawodnik",
 
        "COUNT(UdzialZawodnika.mecz)=mecze",
 
        "SUM(UdzialZawodnika.gol)=punkty",


        "SUM(UdzialZawodnika.minuty)=minuty",


    -- =====================================================
        "SUM(UdzialZawodnika.asysta)=asysty",
    -- FUNKCJA NOWEGO REKORDU
    -- =====================================================


    local function nowyZawodnik()
        "SUM(UdzialZawodnika.zbiorka)=zbiorki",


         return {
         "SUM(UdzialZawodnika.blok)=bloki"


            mecze = 0,
    }, ",")


            punkty = 0,


            asysty = 0,
    -- =====================================================
    -- WARUNEK
    -- =====================================================


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


            bloki = 0,


            minuty = 0
    -- =====================================================
    -- ZAPYTANIE
    -- =====================================================


         }
    local rows =
         mw.ext.cargo.query(
            "UdzialZawodnika",
            fields,
            {
                where = where,
 
                groupBy =
                    "UdzialZawodnika.zawodnik",


    end
                limit = 5000
            }
        )




     -- =====================================================
     -- =====================================================
     -- POMOCNICZA FUNKCJA LICZBOWA
     -- BRAK DANYCH
     -- =====================================================
     -- =====================================================


     local function liczba(wartosc)
     if not rows or #rows == 0 then


         return
         return
             tonumber(wartosc or 0)
             "''Brak danych statystycznych dla drużyny "
             or 0
             .. druzyna
            .. ".''"


     end
     end
Linia 172: Linia 263:


     -- =====================================================
     -- =====================================================
     -- ZLICZANIE STATYSTYK
     -- AKTUALNI ZAWODNICY
     -- =====================================================
     -- =====================================================


     for _, row in ipairs(rows) do
     local aktualni = {}
 
 
    if sezonWyroznienia ~= "" then


         local zawodnik =
         local sezonAktualnySQL =
             mw.text.trim(
             mw.ustring.gsub(
                 row.zawodnik or ""
                 sezonWyroznienia,
                "'",
                "''"
             )
             )




         if zawodnik ~= "" then
         local currentRows =
            mw.ext.cargo.query(
                "UdzialZawodnika,Mecze",
 
                "UdzialZawodnika.zawodnik=zawodnik",
 
                {
                    join =
                        "UdzialZawodnika.mecz=Mecze.id",


            if not zawodnicy[zawodnik] then
                    where =
                        "UdzialZawodnika.druzyna='"
                        .. druzynaSQL
                        .. "'"
                        .. " AND Mecze.sezon='"
                        .. sezonAktualnySQL
                        .. "'"
                        .. " AND UdzialZawodnika.minuty > 0",


                zawodnicy[zawodnik] =
                    groupBy =
                    nowyZawodnik()
                        "UdzialZawodnika.zawodnik",


             end
                    limit = 5000
                }
             )




            local stat =
        if currentRows then
                zawodnicy[zawodnik]


            for _, row in ipairs(currentRows) do


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


            stat.mecze =
                stat.mecze + 1


                if zawodnik ~= "" then


            -- ---------------------------------------------
                    aktualni[zawodnik] = true
            -- PUNKTY
            -- ---------------------------------------------


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


            end


            -- ---------------------------------------------
        end
            -- ASYSTY
            -- ---------------------------------------------


            stat.asysty =
    end
                stat.asysty
                + liczba(row.asysta)




            -- ---------------------------------------------
    -- =====================================================
            -- ZBIÓRKI
    -- PRZYGOTOWANIE DANYCH
            -- ---------------------------------------------
    -- =====================================================


            stat.zbiorki =
    local zawodnicy = {}
                stat.zbiorki
                + liczba(row.zbiorka)




            -- ---------------------------------------------
    for _, row in ipairs(rows) do
            -- BLOKI
            -- ---------------------------------------------


             stat.bloki =
        local zawodnik =
                stat.bloki
             mw.text.trim(
                 + liczba(row.blok)
                 row.zawodnik or ""
            )
 
 
        if zawodnik ~=