Moduł:StatystykiHistoryczne: Różnice pomiędzy wersjami
Wygląd
Nie podano opisu zmian |
Nie podano opisu zmian |
||
| 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 sezonie_biezacy są | ||
-- wyróżniani pogrubieniem. | |||
-- ========================================================= | -- ========================================================= | ||
| Linia 28: | Linia 32: | ||
-- ===================================================== | -- ===================================================== | ||
-- | -- PARAMETRY | ||
-- ===================================================== | -- ===================================================== | ||
| Linia 36: | Linia 40: | ||
) | ) | ||
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 | |||
-- ===================================================== | -- ===================================================== | ||
-- | -- POBRANIE DANYCH Z CARGO | ||
-- ===================================================== | -- ===================================================== | ||
| Linia 65: | Linia 92: | ||
"UdzialZawodnika.zawodnik=zawodnik", | "UdzialZawodnika.zawodnik=zawodnik", | ||
" | "COUNT(UdzialZawodnika.mecz)=mecze", | ||
"UdzialZawodnika. | "SUM(UdzialZawodnika.gol)=punkty", | ||
"UdzialZawodnika. | "SUM(UdzialZawodnika.minuty)=minuty", | ||
"UdzialZawodnika. | "SUM(UdzialZawodnika.asysta)=asysty", | ||
"UdzialZawodnika. | "SUM(UdzialZawodnika.zbiorka)=zbiorki", | ||
" | "SUM(UdzialZawodnika.blok)=bloki" | ||
}, ",") | }, ",") | ||
| Linia 85: | Linia 108: | ||
-- ===================================================== | -- ===================================================== | ||
-- | -- WARUNEK | ||
-- ===================================================== | -- ===================================================== | ||
local | local where = | ||
"UdzialZawodnika.druzyna='" | |||
.. druzynaSQL | |||
.. "'" | |||
-- ===================================================== | |||
-- ZAPYTANIE | |||
-- ===================================================== | |||
local rows = | local rows = | ||
| Linia 104: | Linia 125: | ||
"UdzialZawodnika", | "UdzialZawodnika", | ||
fields, | fields, | ||
{ | |||
where = where, | |||
groupBy = | |||
"UdzialZawodnika.zawodnik", | |||
limit = 5000 | |||
} | |||
) | ) | ||
| Linia 115: | Linia 144: | ||
return | return | ||
"''Brak | "''Brak danych statystycznych dla drużyny " | ||
.. druzyna | .. druzyna | ||
.. " | .. ".''" | ||
end | end | ||
| Linia 123: | Linia 152: | ||
-- ===================================================== | -- ===================================================== | ||
-- | -- FUNKCJA LICZBOWA | ||
-- ===================================================== | -- ===================================================== | ||
local | local function liczba(value) | ||
return | |||
tonumber(value or 0) | |||
or 0 | |||
return | |||
end | end | ||
| Linia 155: | Linia 165: | ||
-- ===================================================== | -- ===================================================== | ||
-- | -- SPRAWDZENIE AKTUALNYCH ZAWODNIKÓW | ||
-- | |||
-- Zawodnik jest uznawany za obecnego, jeżeli ma | |||
-- przynajmniej jeden występ w podanym sezonie. | |||
-- ===================================================== | -- ===================================================== | ||
local | local aktualni = {} | ||
if sezonSQL ~= "" then | |||
local currentRows = | |||
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 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 | |||
-- ===================================================== | |||
-- PRZYGOTOWANIE DANYCH | |||
-- ===================================================== | |||
local zawodnicy = {} | |||
for _, row in ipairs(rows) do | |||
local zawodnik = | |||
mw.text.trim( | |||
row.zawodnik or "" | |||
) | |||
if zawodnik ~= "" then | |||
table.insert( | |||
zawodnicy, | |||
{ | |||
zawodnik = zawodnik, | |||
mecze = | |||
liczba(row.mecze), | |||
punkty = | |||
liczba(row.punkty), | |||
minuty = | |||
liczba(row.minuty), | |||
asysty = | |||
liczba(row.asysty), | |||
zbiorki = | |||
liczba(row.zbiorki), | |||
bloki = | |||
liczba(row.bloki), | |||
aktualny = | |||
aktualni[zawodnik] or false | |||
} | |||
) | |||
end | |||
end | end | ||
| Linia 277: | Linia 286: | ||
minuty = | minuty = | ||
tonumber(minuty) | math.floor( | ||
tonumber(minuty or 0) | |||
or 0 | |||
) | |||
local godziny = | local godziny = | ||
| Linia 301: | Linia 311: | ||
-- ===================================================== | -- ===================================================== | ||
-- LINK DO | -- LINK DO ZAWODNIKA | ||
-- ===================================================== | -- ===================================================== | ||
local function linkZawodnika(nazwa | local function linkZawodnika(row) | ||
local nazwa = | |||
row.zawodnik | |||
local tekst = | |||
"[[" | "[[" | ||
.. nazwa | .. nazwa | ||
| Linia 312: | Linia 326: | ||
.. nazwa | .. nazwa | ||
.. "]]" | .. "]]" | ||
-- ----------------------------------------------- | |||
-- WYRÓŻNIENIE AKTUALNEGO ZAWODNIKA | |||
-- ----------------------------------------------- | |||
if row.aktualny then | |||
tekst = | |||
"'''" | |||
.. tekst | |||
.. "'''" | |||
end | |||
return tekst | |||
end | end | ||
| Linia 317: | Linia 348: | ||
-- ===================================================== | -- ===================================================== | ||
-- | -- SORTOWANIE | ||
-- ===================================================== | -- ===================================================== | ||
local function | local funkcjeSortowania = { | ||
pole, | mecze = function(a, b) | ||
if a.mecze ~= b.mecze then | |||
return a.mecze > b.mecze | |||
end | |||
return a.zawodnik < b.zawodnik | |||
end, | |||
punkty = function(a, b) | |||