Moduł:StatystykiHistoryczne: Różnice pomiędzy wersjami
Wygląd
Nie podano opisu zmian |
Nie podano opisu zmian |
||
| Linia 24: | Linia 24: | ||
-- }} | -- }} | ||
-- | -- | ||
-- Zawodnicy występujący w | -- Zawodnicy występujący w wybranym sezonie | ||
-- | -- są wyróżniani pogrubieniem. | ||
-- ========================================================= | -- ========================================================= | ||
| Linia 102: | Linia 98: | ||
-- ===================================================== | -- ===================================================== | ||
-- USTALENIE SEZONU | -- 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. | |||
-- | |||
-- ===================================================== | -- ===================================================== | ||
| 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 | -- 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 | -- AKTUALNI ZAWODNICY | ||
-- | -- | ||
-- Zawodnik jest | -- Zawodnik jest aktualny, jeżeli ma przynajmniej | ||
-- w sezonie | -- jeden występ z minutami > 0 w sezonie wybranym | ||
-- do wyróżnienia. | |||
-- | |||
-- ===================================================== | -- ===================================================== | ||
| 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 | ||
-- | -- | ||
-- | -- Wynik: | ||
-- 1729:35 | |||
-- 88:23 | |||
-- | -- 4:44 | ||
-- | |||
-- | |||
-- | -- | ||
-- | -- Format: MM:SS | ||
-- ===================================================== | -- ===================================================== | ||
local function formatujMinuty( | local function formatujMinuty(minuty) | ||
local wartosc = | local wartosc = | ||
tonumber( | 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 | ||
) | ) | ||
if sekundy >= 60 then | |||
caleMinuty = | |||
caleMinuty + 1 | |||
sekundy = 0 | |||
end | |||
| Linia 440: | Linia 434: | ||
"%d:%02d", | "%d:%02d", | ||
caleMinuty, | caleMinuty, | ||
sekundy | |||
) | ) | ||
| Linia 465: | Linia 459: | ||
-- ------------------------------------------------- | -- ------------------------------------------------- | ||
-- ZAWODNIK | -- AKTUALNY ZAWODNIK = POGRUBIENIE | ||
-- ------------------------------------------------- | -- ------------------------------------------------- | ||
| Linia 680: | Linia 674: | ||
-- ------------------------------------------------- | -- ------------------------------------------------- | ||
-- | -- TABELA | ||
-- ------------------------------------------------- | -- ------------------------------------------------- | ||
| Linia 690: | Linia 684: | ||
-- ------------------------------------------------- | -- ------------------------------------------------- | ||
-- | -- NAGŁÓWEK | ||
-- ------------------------------------------------- | -- ------------------------------------------------- | ||
| Linia 701: | Linia 695: | ||
table.insert( | |||
wynik, | |||
"! Miejsce" | |||
) | |||
table.insert( | |||
wynik, | |||
"! Zawodnik" | |||
) | |||
table.insert( | table.insert( | ||
wynik, | wynik, | ||
" | "! " | ||
.. 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 | ||
table.insert( | table.insert( | ||
| Linia 782: | Linia 798: | ||
-- ===================================================== | -- ===================================================== | ||
-- INFORMACJA O | -- 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: | ||
-- ===================================================== | -- ===================================================== | ||
-- | -- 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>' | |||
) | ) | ||
-- ===================================================== | -- ===================================================== | ||
-- | -- 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>' | |||
) | ) | ||
-- ===================================================== | -- ===================================================== | ||
-- | -- 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>' | |||
) | ) | ||
-- ===================================================== | -- ===================================================== | ||
-- | -- 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>' | |||
) | ) | ||
-- ===================================================== | -- ===================================================== | ||
-- | -- 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>' | |||
) | ) | ||
-- ===================================================== | -- ===================================================== | ||
-- | -- 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
-- =================================