Przejdź do zawartości

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

Z Encyklopedia Poznanskiego Sportu
Nie podano opisu zmian
Nie podano opisu zmian
Linia 24: Linia 24:
-- }}
-- }}
--
--
-- Zawodnicy występujący w ostatnim wprowadzonym
-- Zawodnicy występujący w wybranym sezonie
-- sezonie są wyróżniani pogrubieniem.
-- są wyróżniani pogrubieniem.
--
-- Jeżeli podany sezon bieżący nie ma jeszcze danych,
-- automatycznie używany jest ostatni sezon obecny
-- w bazie.
-- =========================================================
-- =========================================================


Linia 102: Linia 98:


     -- =====================================================
     -- =====================================================
     -- USTALENIE SEZONU REFERENCYJNEGO
     -- USTALENIE SEZONU DO WYRÓŻNIENIA
     --
     --
     -- 1. Jeżeli podany sezon ma jakiekolwiek wpisy
     -- Najpierw sprawdzamy sezon podany przez użytkownika.
    --    dla drużyny, używamy tego sezonu.
     --
     --
     -- 2. Jeżeli nie ma w nim żadnych wpisów,
     -- Jeżeli w tym sezonie są występy z minutami > 0,
     --   szukamy ostatniego sezonu obecnego w bazie.
     -- wykorzystujemy właśnie ten sezon.
     --
     --
     -- UWAGA:
     -- Jeżeli nie ma danych, automatycznie wyszukujemy
     -- Nie sprawdzamy tutaj minuty > 0.
     -- ostatni sezon, w którym drużyna miała zawodników
    -- Sam fakt istnienia wpisu w UdzialZawodnika
     -- z minutami > 0.
     -- oznacza, że zawodnik jest wpisany do danego sezonu.
     -- =====================================================
     -- =====================================================


Linia 120: Linia 114:




     -- =====================================================
     -- -----------------------------------------------------
     -- SPRAWDZENIE PODANEGO SEZONU
     -- SPRAWDZENIE PODANEGO SEZONU
     -- =====================================================
     -- -----------------------------------------------------


     if sezonSQL ~= "" then
     if sezonSQL ~= "" then
Linia 142: Linia 136:
                         .. " AND Mecze.sezon='"
                         .. " AND Mecze.sezon='"
                         .. sezonSQL
                         .. sezonSQL
                         .. "'",
                         .. "'"
                        .. " AND UdzialZawodnika.minuty > 0",


                     groupBy =
                     groupBy =
Linia 164: Linia 159:


     -- =====================================================
     -- =====================================================
     -- JEŻELI BRAK DANYCH DLA PODANEGO SEZONU
     -- JEŻELI NIE MA DANYCH DLA PODANEGO SEZONU
     -- SZUKAMY OSTATNIEGO WPROWADZONEGO SEZONU
     -- SZUKAMY OSTATNIEGO WPROWADZONEGO SEZONU
     -- =====================================================
     -- =====================================================
Linia 183: Linia 178:
                         "UdzialZawodnika.druzyna='"
                         "UdzialZawodnika.druzyna='"
                         .. druzynaSQL
                         .. druzynaSQL
                         .. "'",
                         .. "'"
                        .. " AND UdzialZawodnika.minuty > 0",


                     groupBy =
                     groupBy =
Linia 275: Linia 271:


     -- =====================================================
     -- =====================================================
     -- AKTUALNI / OSTATNI ZAWODNICY
     -- AKTUALNI ZAWODNICY
     --
     --
     -- Zawodnik jest wyróżniony, jeżeli ma wpis
     -- Zawodnik jest aktualny, jeżeli ma przynajmniej
     -- w sezonie referencyjnym.
     -- jeden występ z minutami > 0 w sezonie wybranym
    --
     -- do wyróżnienia.
     -- Nie wymagamy minuty > 0.
     -- =====================================================
     -- =====================================================


Linia 312: Linia 307:
                         .. " AND Mecze.sezon='"
                         .. " AND Mecze.sezon='"
                         .. sezonAktualnySQL
                         .. sezonAktualnySQL
                         .. "'",
                         .. "'"
                        .. " AND UdzialZawodnika.minuty > 0",


                     groupBy =
                     groupBy =
Linia 400: Linia 396:
     -- FORMATOWANIE MINUT
     -- FORMATOWANIE MINUT
     --
     --
     -- Cargo przechowuje wartość jako SEKUNDY.
     -- Wynik:
    --
     -- 1729:35
    -- Przykład:
     -- 88:23
     --
     -- 4:44
    -- 103775 sekund
    -- = 1729 minut i 35 sekund
    -- = 1729:35
     --
    -- Format:
     -- MM:SS
     --
     --
     -- Pierwsza część NIE jest ograniczona do 59.
     -- Format: MM:SS
     -- =====================================================
     -- =====================================================


     local function formatujMinuty(sekundy)
     local function formatujMinuty(minuty)


         local wartosc =
         local wartosc =
             tonumber(sekundy or 0)
             tonumber(minuty or 0)
             or 0
             or 0




         wartosc =
         local caleMinuty =
            math.floor(wartosc)
 
 
        local sekundy =
             math.floor(
             math.floor(
                 wartosc + 0.5
                 ((wartosc - caleMinuty) * 60) + 0.5
             )
             )




         local caleMinuty =
         if sekundy >= 60 then
             math.floor(
 
                 wartosc / 60
             caleMinuty =
            )
                 caleMinuty + 1


            sekundy = 0


         local pozostaleSekundy =
         end
            wartosc % 60




Linia 440: Linia 434:
             "%d:%02d",
             "%d:%02d",
             caleMinuty,
             caleMinuty,
             pozostaleSekundy
             sekundy
         )
         )


Linia 465: Linia 459:


         -- -------------------------------------------------
         -- -------------------------------------------------
         -- ZAWODNIK Z SEZONU REFERENCYJNEGO
         -- AKTUALNY ZAWODNIK = POGRUBIENIE
         -- -------------------------------------------------
         -- -------------------------------------------------


Linia 680: Linia 674:


         -- -------------------------------------------------
         -- -------------------------------------------------
         -- POCZĄTEK TABELI
         -- TABELA
         -- -------------------------------------------------
         -- -------------------------------------------------


Linia 690: Linia 684:


         -- -------------------------------------------------
         -- -------------------------------------------------
         -- TYTUŁ
         -- NAGŁÓWEK
         -- -------------------------------------------------
         -- -------------------------------------------------


Linia 701: Linia 695:




         -- -------------------------------------------------
         table.insert(
         -- NAGŁÓWKI
            wynik,
         -- -------------------------------------------------
            "! Miejsce"
         )
 
 
         table.insert(
            wynik,
            "! Zawodnik"
        )
 


         table.insert(
         table.insert(
             wynik,
             wynik,
             "! Miejsce !! Zawodnik !! "
             "! "
             .. definicja.nazwa
             .. definicja.nazwa
         )
         )
Linia 723: Linia 725:
             )
             )


            -- miejsce


             table.insert(
             table.insert(
Linia 728: Linia 732:
                 "| "
                 "| "
                 .. i
                 .. i
                 .. " || "
            )
                 .. linkZawodnika(zawodnik)
 
                 .. " || '''"
 
            -- zawodnik
 
            table.insert(
                wynik,
                 "| "
                 .. linkZawodnika(
                    zawodnik
                )
            )
 
 
            -- wartość
 
            table.insert(
                wynik,
                 "| '''"
                 .. definicja.format(
                 .. definicja.format(
                     zawodnik[
                     zawodnik[
Linia 741: Linia 761:
         end
         end


        -- -------------------------------------------------
        -- KONIEC TABELI
        -- -------------------------------------------------


         table.insert(
         table.insert(
Linia 782: Linia 798:


     -- =====================================================
     -- =====================================================
     -- INFORMACJA O SEZONIE REFERENCYJNYM
     -- INFORMACJA O AKTUALNYCH ZAWODNIKACH
     -- =====================================================
     -- =====================================================


Linia 789: Linia 805:
         table.insert(
         table.insert(
             wynik,
             wynik,
             "''Pogrubieniem wyróżniono zawodników "
             "'''''Pogrubieniem wyróżniono zawodników "
             .. "występujących w sezonie "
             .. "występujących w sezonie "
            .. "'''"
             .. sezonWyroznienia
             .. sezonWyroznienia
             .. "'''.''"
             .. ".'''''"
         )
         )


Linia 806: Linia 821:


     -- =====================================================
     -- =====================================================
     -- TABELA 1 – MECZE
     -- UKŁAD 3 KOLUMNY × 2 RZĘDY
    --
    -- NIE używamy tutaj CSS Grid.
    --
    -- Tabele wikitable są umieszczone w komórkach
    -- zwykłej tabeli HTML. Dzięki temu MediaWiki
    -- poprawnie interpretuje każdą wikitable.
     -- =====================================================
     -- =====================================================
    table.insert(
        wynik,
        '<table style="width:100%; border-collapse:separate; border-spacing:12px 0;"><tr>'
    )
    -- =====================================================
    -- RZĄD 1 – MECZE
    -- =====================================================
    table.insert(
        wynik,
        '<td style="width:33.33%; vertical-align:top; padding:0;">'
    )


     table.insert(
     table.insert(
Linia 815: Linia 851:
         )
         )
     )
     )


     table.insert(
     table.insert(
         wynik,
         wynik,
         ""
         '</td>'
     )
     )




     -- =====================================================
     -- =====================================================
     -- TABELA 2 – PUNKTY
     -- RZĄD 1 – PUNKTY
     -- =====================================================
     -- =====================================================
    table.insert(
        wynik,
        '<td style="width:33.33%; vertical-align:top; padding:0;">'
    )


     table.insert(
     table.insert(
Linia 833: Linia 873:
         )
         )
     )
     )


     table.insert(
     table.insert(
         wynik,
         wynik,
         ""
         '</td>'
     )
     )




     -- =====================================================
     -- =====================================================
     -- TABELA 3 – MINUTY
     -- RZĄD 1 – MINUTY
     -- =====================================================
     -- =====================================================
    table.insert(
        wynik,
        '<td style="width:33.33%; vertical-align:top; padding:0;">'
    )


     table.insert(
     table.insert(
Linia 852: Linia 896:
     )
     )


    table.insert(
        wynik,
        '</td>'
    )
    -- =====================================================
    -- KONIEC RZĘDU 1
    -- =====================================================


     table.insert(
     table.insert(
         wynik,
         wynik,
         ""
         '</tr><tr>'
     )
     )




     -- =====================================================
     -- =====================================================
     -- TABELA 4 – ASYSTY
     -- RZĄD 2 – ASYSTY
     -- =====================================================
     -- =====================================================
    table.insert(
        wynik,
        '<td style="width:33.33%; vertical-align:top; padding:12px 0 0 0;">'
    )


     table.insert(
     table.insert(
Linia 869: Linia 927:
         )
         )
     )
     )


     table.insert(
     table.insert(
         wynik,
         wynik,
         ""
         '</td>'
     )
     )




     -- =====================================================
     -- =====================================================
     -- TABELA 5 – ZBIÓRKI
     -- RZĄD 2 – ZBIÓRKI
     -- =====================================================
     -- =====================================================
    table.insert(
        wynik,
        '<td style="width:33.33%; vertical-align:top; padding:12px 0 0 0;">'
    )


     table.insert(
     table.insert(
Linia 887: Linia 949:
         )
         )
     )
     )


     table.insert(
     table.insert(
         wynik,
         wynik,
         ""
         '</td>'
     )
     )




     -- =====================================================
     -- =====================================================
     -- TABELA 6 – BLOKI
     -- RZĄD 2 – BLOKI
     -- =====================================================
     -- =====================================================
    table.insert(
        wynik,
        '<td style="width:33.33%; vertical-align:top; padding:12px 0 0 0;">'
    )


     table.insert(
     table.insert(
Linia 904: Linia 970:
             tabele[6]
             tabele[6]
         )
         )
    )
    table.insert(
        wynik,
        '</td>'
    )
    -- =====================================================
    -- KONIEC RZĘDU 2 I KONTENERA
    -- =====================================================
    table.insert(
        wynik,
        '</tr></table>'
     )
     )



Wersja z 10:04, 30 sie 2026

Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:StatystykiHistoryczne/opis

local p = {}

-- =========================================================
-- MODUŁ: STATYSTYKIHISTORYCZNE
--
-- Łączne statystyki zawodników ze wszystkich
-- wprowadzonych sezonów.
--
-- KOSZYKÓWKA
--
-- Tabele:
-- 1. Mecze
-- 2. Punkty
-- 3. Minuty
-- 4. Asysty
-- 5. Zbiórki
-- 6. Bloki
--
-- Użycie:
--
-- {{#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)

    -- =====================================================
    -- 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 DO WYRÓŻNIENIA
    --
    -- Najpierw sprawdzamy sezon podany przez użytkownika.
    --
    -- Jeżeli w tym sezonie są występy z minutami > 0,
    -- wykorzystujemy właśnie ten sezon.
    --
    -- Jeżeli nie ma danych, automatycznie wyszukujemy
    -- ostatni sezon, w którym drużyna miała zawodników
    -- z minutami > 0.
    -- =====================================================

    local sezonWyroznienia = ""
    local znalezionoBiezacy = false


    -- -----------------------------------------------------
    -- SPRAWDZENIE PODANEGO SEZONU
    -- -----------------------------------------------------

    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 WPROWADZONEGO SEZONU
    -- =====================================================

    if not znalezionoBiezacy then

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

                "Mecze.sezon=sezon",

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

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

                    groupBy =
                        "Mecze.sezon",

                    orderBy =
                        "Mecze.sezon DESC",

                    limit = 100
                }
            )


        if sezony and #sezony > 0 then

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

        end

    end


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

    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"

    }, ",")


    -- =====================================================
    -- WARUNEK
    -- =====================================================

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


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