Przejdź do zawartości

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

Z Encyklopedia Poznanskiego Sportu
Utworzono nową stronę "local p = {} -- ========================================================= -- MODUŁ: STATYSTYKIHISTORYCZNE -- -- Łączne statystyki wszystkich zawodników Enea Basket Poznań -- ze wszystkich sezonów znajdujących się w Cargo. -- -- Rankingi: -- MECZE -- PUNKTY -- MINUTY -- ASYSTY -- ZBIÓRKI -- BLOKI -- -- Dane: -- UdzialZawodnika -- -- Uwzględniani są WYŁĄCZNIE zawodnicy, -- dla których: -- -- druzyna = "Enea Basket Poznań" -- -- =======…"
 
Nie podano opisu zmian
 
(Nie pokazano 9 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 4: Linia 4:
-- MODUŁ: STATYSTYKIHISTORYCZNE
-- MODUŁ: STATYSTYKIHISTORYCZNE
--
--
-- Łączne statystyki wszystkich zawodników Enea Basket Poznań
-- Łączne statystyki zawodników ze wszystkich
-- ze wszystkich sezonów znajdujących się w Cargo.
-- wprowadzonych sezonów.
--
--
-- Rankingi:
-- KOSZYKÓWKA
--  MECZE
--  PUNKTY
--  MINUTY
--  ASYSTY
--  ZBIÓRKI
--  BLOKI
--
--
-- Dane:
-- Tabele:
--   UdzialZawodnika
-- 1. Mecze
-- 2. Punkty
-- 3. Minuty
-- 4. Asysty
-- 5. Zbiórki
-- 6. Bloki
--
--
-- Uwzględniani są WYŁĄCZNIE zawodnicy,
-- Użycie:
-- dla których:
--
--
--   druzyna = "Enea Basket Poznań"
-- {{#invoke:StatystykiHistoryczne|main
-- |druzyna=Enea Basket Poznań
-- |sezon_biezacy=2025/2026
-- }}
--
--
-- Zawodnicy występujący w wybranym sezonie
-- są wyróżniani pogrubieniem.
-- =========================================================
-- =========================================================




-- =========================================================
function p.main(frame)
-- USTAWIENIA
 
-- =========================================================
    -- =====================================================
    -- PARAMETRY
    -- =====================================================
 
    local druzyna =
        mw.text.trim(
            frame.args.druzyna or ""
        )
 
    local sezonBiezacy =
        mw.text.trim(
            frame.args.sezon_biezacy or ""
        )
 
 
    -- =====================================================
    -- SPRAWDZENIE DRUŻYNY
    -- =====================================================
 
    if druzyna == "" then
 
        return
            "'''Błąd:''' nie podano parametru <code>druzyna</code>."
 
    end
 
 
    -- =====================================================
    -- BEZPIECZNE PRZYGOTOWANIE NAZW
    -- =====================================================
 
    local druzynaSQL =
        mw.ustring.gsub(
            druzyna,
            "'",
            "''"
        )
 
 
    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
 
 
    -- =====================================================
    -- 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",


local NAZWA_DRUZYNY = "Enea Basket Poznań"
                    limit = 5000
                }
            )




-- =========================================================
        if sprawdzenieSezonu
-- FUNKCJA BEZPIECZNEJ KONWERSJI NA LICZBĘ
            and #sprawdzenieSezonu > 0 then
-- =========================================================


local function liczba(value)
            sezonWyroznienia = sezonBiezacy
            znalezionoBiezacy = true


    local n = tonumber(value)
        end


    if n then
        return n
     end
     end


    return 0


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",


-- =========================================================
                {
-- FORMATOWANIE MINUT
                    join =
--
                        "UdzialZawodnika.mecz=Mecze.id",
-- Cargo przechowuje minuty jako liczbę całkowitą.
--
-- Przykład:
--
-- 65  -> 1:05
-- 125 -> 2:05
-- =========================================================


local function formatujMinuty(minuty)
                    where =
                        "UdzialZawodnika.druzyna='"
                        .. druzynaSQL
                        .. "'"
                        .. " AND UdzialZawodnika.minuty > 0",


    minuty = liczba(minuty)
                    groupBy =
                        "Mecze.sezon",


    local godziny =
                    orderBy =
        math.floor(minuty / 60)
                        "Mecze.sezon DESC",


    local min =
                    limit = 100
        minuty % 60
                }
            )


    return string.format(
        "%d:%02d",
        godziny,
        min
    )


end
        if sezony and #sezony > 0 then


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


-- =========================================================
        end
-- POBIERANIE DANYCH
-- =========================================================


function p.main(frame)
    end




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


     local fields = table.concat({
     local fields = table.concat({


         "zawodnik=zawodnik",
         "UdzialZawodnika.zawodnik=zawodnik",
         "mecz=mecz",
 
         "minuty=minuty",
         "COUNT(UdzialZawodnika.mecz)=mecze",
         "gol=gol",
 
         "asysta=asysta",
         "SUM(UdzialZawodnika.gol)=punkty",
         "zbiorka=zbiorka",
 
         "blok=blok"
         "SUM(UdzialZawodnika.minuty)=minuty",
 
         "SUM(UdzialZawodnika.asysta)=asysty",
 
         "SUM(UdzialZawodnika.zbiorka)=zbiorki",
 
         "SUM(UdzialZawodnika.blok)=bloki"


     }, ",")
     }, ",")
Linia 105: Linia 219:


     -- =====================================================
     -- =====================================================
     -- ZAPYTANIE
     -- WARUNEK
    --
    -- TYLKO ENEA BASKET POZNAŃ
    --
    -- Nie ma tutaj filtra sezonu.
    -- Dzięki temu pobierane są WSZYSTKIE
    -- wprowadzone sezony.
     -- =====================================================
     -- =====================================================


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


        where =
            "druzyna='"
            .. NAZWA_DRUZYNY
            .. "'",
        limit = 50000
    }


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


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


Linia 141: Linia 255:


         return
         return
             "''Brak danych statystycznych "
             "''Brak danych statystycznych dla drużyny "
             .. "dla Enea Basket Poznań w bazie.''"
            .. druzyna
             .. ".''"


     end
     end
Linia 148: Linia 263:


     -- =====================================================
     -- =====================================================
     -- TABLICA ZAWODNIKÓW
     -- 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",
 
                {
                    join =
                        "UdzialZawodnika.mecz=Mecze.id",
 
                    where =
                        "UdzialZawodnika.druzyna='"
                        .. druzynaSQL
                        .. "'"
                        .. " AND Mecze.sezon='"
                        .. sezonAktualnySQL
                        .. "'"
                        .. " AND UdzialZawodnika.minuty > 0",
 
                    groupBy =
                        "UdzialZawodnika.zawodnik",
 
                    limit = 5000
                }
            )
 
 
        if currentRows then
 
            for _, row in ipairs(currentRows) do
 
                local zawodnik =
                    mw.text.trim(
                        row.zawodnik or ""
                    )
 
 
                if zawodnik ~= "" then
 
                    aktualni[zawodnik] = true
 
                end
 
            end
 
        end
 
    end




     -- =====================================================
     -- =====================================================
     -- GRUPOWANIE DANYCH
     -- PRZYGOTOWANIE DANYCH
     -- =====================================================
     -- =====================================================
    local zawodnicy = {}


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


         local zawodnik =
         local zawodnik =
Linia 169: Linia 346:
         if zawodnik ~= "" then
         if zawodnik ~= "" then


            table.insert(
                zawodnicy,
                {
                    zawodnik = zawodnik,
                    mecze =
                        liczba(row.mecze),
                    punkty =
                        liczba(row.punkty),


            -- ---------------------------------------------
                    -- Cargo przechowuje minuty jako SEKUNDY
            -- UTWORZENIE REKORDU ZAWODNIKA
                    minuty =
            -- ---------------------------------------------
                        liczba(row.minuty),


            if not zawodnicy[zawodnik] then
                    asysty =
                        liczba(row.asysty),


                zawodnicy[zawodnik] = {
                    zbiorki =
                        liczba(row.zbiorki),


                     mecze = 0,
                     bloki =
                        liczba(row.bloki),


                     punkty = 0,
                     aktualny =
                        aktualni[zawodnik] or false


                    minuty = 0,
                }
            )