Moduł:StatystykiHistoryczne: Różnice pomiędzy wersjami
Wygląd
Nie podano opisu zmian |
Nie podano opisu zmian |
||
| (Nie pokazano 8 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: | ||
-- 1. Mecze | -- 1. Mecze | ||
-- 2. Punkty | -- 2. Punkty | ||
-- 3. | -- 3. Minuty | ||
-- 4. | -- 4. Asysty | ||
-- 5. | -- 5. Zbiórki | ||
-- 6. | -- 6. Bloki | ||
-- | -- | ||
-- Użycie: | -- Użycie: | ||
| 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. | |||
-- ========================================================= | -- ========================================================= | ||
function p.main(frame) | function p.main(frame) | ||
-- | -- ===================================================== | ||
-- | -- PARAMETRY | ||
-- | -- ===================================================== | ||
local druzyna = | local druzyna = | ||
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 | ||
-- | -- ===================================================== | ||
-- BEZPIECZNE PRZYGOTOWANIE | -- BEZPIECZNE PRZYGOTOWANIE NAZW | ||
-- | -- ===================================================== | ||
local druzynaSQL = | local druzynaSQL = | ||
| Linia 59: | Linia 68: | ||
"''" | "''" | ||
) | ) | ||
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 | local sezonWyroznienia = "" | ||
local znalezionoBiezacy = false | |||
-- ----------------------------------------------------- | |||
-- Najpierw sprawdzamy sezon podany przez użytkownika | |||
-- ----------------------------------------------------- | |||
if sezonSQL ~= "" then | |||
"UdzialZawodnika | 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 | end | ||
| Linia 127: | Linia 196: | ||
-- ===================================================== | -- ===================================================== | ||
-- | -- 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 = | |||
mw.ext.cargo.query( | |||
"UdzialZawodnika", | |||
fields, | |||
{ | |||
where = where, | |||
groupBy = | |||
"UdzialZawodnika.zawodnik", | |||
limit = 5000 | |||
} | |||
) | |||
-- ===================================================== | -- ===================================================== | ||
-- | -- BRAK DANYCH | ||
-- ===================================================== | -- ===================================================== | ||
if not rows or #rows == 0 then | |||
return | return | ||
"''Brak danych statystycznych dla drużyny " | |||
.. druzyna | |||
.. ".''" | |||
end | end | ||
| Linia 172: | Linia 263: | ||
-- ===================================================== | -- ===================================================== | ||
-- | -- AKTUALNI ZAWODNICY | ||
-- ===================================================== | -- ===================================================== | ||
local aktualni = {} | |||
if sezonWyroznienia ~= "" then | |||
local | local sezonAktualnySQL = | ||
mw. | 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 | |||
-- ===================================================== | |||
-- PRZYGOTOWANIE DANYCH | |||
-- ===================================================== | |||
local zawodnicy = {} | |||
for _, row in ipairs(rows) do | |||
local zawodnik = | |||
mw.text.trim( | |||
row.zawodnik or "" | |||
) | |||
if zawodnik ~= | |||