Moduł:StatystykiHistoryczne: Różnice pomiędzy wersjami
Wygląd
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Ł: | -- MODUŁ: STATYSTYKIHISTORYCZNE | ||
-- | -- | ||
-- Łączne statystyki zawodników | -- Łączne statystyki zawodników ze wszystkich | ||
-- | -- 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 | |||
-- }} | -- }} | ||
-- | -- | ||
-- | -- Zawodnicy występujący w wybranym sezonie | ||
-- są wyróżniani pogrubieniem. | |||
-- ========================================================= | -- ========================================================= | ||
| Linia 28: | Linia 32: | ||
-- ===================================================== | -- ===================================================== | ||
-- | -- 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 | ||
"'' | "'''Błąd:''' nie podano parametru <code>druzyna</code>." | ||
end | end | ||
| Linia 46: | Linia 59: | ||
-- ===================================================== | -- ===================================================== | ||
-- BEZPIECZNE PRZYGOTOWANIE | -- BEZPIECZNE PRZYGOTOWANIE NAZW | ||
-- ===================================================== | -- ===================================================== | ||
| Linia 55: | Linia 68: | ||
"''" | "''" | ||
) | ) | ||
local sezonSQL = "" | |||
if sezonBiezacy ~= "" then | |||
sezonSQL = | |||
mw.ustring.gsub( | |||
sezonBiezacy, | |||
"'", | |||
"''" | |||
) | |||
end | |||
-- ===================================================== | -- ===================================================== | ||
-- | -- FUNKCJA LICZBOWA | ||
-- ===================================================== | -- ===================================================== | ||
local | 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", | |||
{ | |||
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 | 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 | |||
.. "'" | |||
.. " AND UdzialZawodnika.minuty > 0" | |||
-- ===================================================== | |||
-- ZAPYTANIE | |||
-- ===================================================== | |||
local rows = | local rows = | ||
| Linia 104: | Linia 237: | ||
"UdzialZawodnika", | "UdzialZawodnika", | ||
fields, | fields, | ||
{ | |||
where = where, | |||
groupBy = | |||
"UdzialZawodnika.zawodnik", | |||
limit = 5000 | |||
} | |||
) | ) | ||
| Linia 115: | Linia 255: | ||
return | return | ||
"''Brak | "''Brak danych statystycznych dla drużyny " | ||
.. druzyna | .. druzyna | ||
.. " | .. ".''" | ||
end | end | ||
| Linia 123: | Linia 263: | ||
-- ===================================================== | -- ===================================================== | ||
-- | -- AKTUALNI ZAWODNICY | ||
-- ===================================================== | -- ===================================================== | ||
local | 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 | end | ||
| Linia 168: | Linia 330: | ||
-- ===================================================== | -- ===================================================== | ||
-- | -- 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 | ||
table.insert( | |||
zawodnicy, | |||
{ | |||
zawodnik = zawodnik, | |||
mecze = | |||
liczba(row.mecze), | |||
punkty = | |||
liczba(row.punkty), | |||
-- Cargo przechowuje minuty jako SEKUNDY | |||
minuty = | |||
liczba(row.minuty), | |||
asysty = | |||
liczba(row.asysty), | |||
zbiorki = | |||
liczba(row.zbiorki), | |||
bloki = | |||
liczba(row.bloki), | |||
aktualny = | |||
aktualni[zawodnik] or false | |||
} | |||
) | |||
end | |||
end | |||
-- ===================================================== | |||
-- FORMATOWANIE MINUT | |||
-- | |||
-- 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 = | |||
tonumber(sekundy or 0) | |||
or 0 | |||