Przejdź do zawartości

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

Z Encyklopedia Poznanskiego Sportu
Nie podano opisu zmian
Nie podano opisu zmian
 
(Nie pokazano 1 pośredniej wersji utworzonej przez tego samego użytkownika)
Linia 9: Linia 9:
-- team2 = przeciwnik
-- team2 = przeciwnik
--
--
-- Identyfikacja rywalizacji:
-- nazwa_statystyki1 / nazwa_statystyki2 służą do identyfikacji
--  Mecze.nazwa_statystyki1
-- drużyn niezależnie od historycznych nazw sponsorskich.
--  Mecze.nazwa_statystyki2
--
-- Dzięki temu zmiana nazwy sponsorskiej nie rozbija H2H.
--
--
-- Zawiera:
-- Zawiera:
-- 1. Bilans ogółem / dom / wyjazd
-- 1. Bilans ogółem / dom / wyjazd
-- 2. Trenerów team1
-- 2. Trenerów team1 w rywalizacji
-- 3. Najlepszych strzelców obu drużyn
-- 3. Najlepszych strzelców obu drużyn
-- 4. Rekordy indywidualne team1
-- 4. Rekordy indywidualne team1
Linia 23: Linia 20:
-- 6. Analizę kwart
-- 6. Analizę kwart
-- 7. Wszystkie mecze
-- 7. Wszystkie mecze
-- 8. Dogrywka 1, 2 i 3
-- 8. Dogrywki 1, 2 i 3
-- =========================================================
-- =========================================================




function p.main(frame)
function p.main(frame)
    -- =====================================================
    -- PARAMETRY
    -- =====================================================


     local team1 = mw.text.trim(frame.args.team1 or "")
     local team1 = mw.text.trim(frame.args.team1 or "")
Linia 42: Linia 43:


     -- =====================================================
     -- =====================================================
     -- SQL
     -- BEZPIECZEŃSTWO SQL
     -- =====================================================
     -- =====================================================


     local function sql(value)
     local function sql(value)
         return mw.ustring.gsub(value, "'", "''")
 
         return mw.ustring.gsub(
            tostring(value or ""),
            "'",
            "''"
        )
 
     end
     end


     local team1SQL = sql(team1)
     local team1SQL = sql(team1)
Linia 63: Linia 71:
         end
         end


         local tekst = tostring(value)
         local tekst =
 
            mw.ustring.gsub(
        tekst = mw.ustring.gsub(
                tostring(value),
            tekst,
                "%s+",
            "%s+",
                ""
            ""
            )
        )


        -- WAŻNE:
        -- nie przekazujemy bezpośrednio gsub() do tonumber(),
        -- ponieważ gsub zwraca dwa wyniki.
         return tonumber(tekst) or 0
         return tonumber(tekst) or 0


Linia 81: Linia 85:
     local function procent(wygrane, mecze)
     local function procent(wygrane, mecze)


         if not mecze or mecze == 0 then
         if mecze == 0 then
             return "0,0%"
             return "0,0%"
         end
         end
Linia 88: Linia 92:
             (wygrane / mecze) * 100
             (wygrane / mecze) * 100


         local tekst =
         return string.format(
            string.format(
            "%.1f%%",
                "%.1f",
            wartosc
                wartosc
        ):gsub("%.", ",")
            )
 
        tekst =
            mw.ustring.gsub(
                tekst,
                "%.",
                ","
            )
 
        return tekst .. "%"


     end
     end
Linia 107: Linia 101:


     -- =====================================================
     -- =====================================================
     -- USTALENIE STRONY TEAM1
     -- IDENTYFIKACJA STRONY TEAM1
     -- =====================================================
     -- =====================================================


Linia 131: Linia 125:
     local function wynikDruzyny(row)
     local function wynikDruzyny(row)


         local g1 = liczba(row.gole1)
         local g1 =
         local g2 = liczba(row.gole2)
            liczba(row.gole1)
 
         local g2 =
            liczba(row.gole2)
 


         if row.ns1 == team1 then
         if row.ns1 == team1 then
             return g1, g2
             return g1, g2
        end


         if row.ns2 == team1 then
         elseif row.ns2 == team1 then
 
             return g2, g1
             return g2, g1
         end
         end


Linia 153: Linia 153:
     local function nazwaMeczu(row)
     local function nazwaMeczu(row)


         local d1 = row.druzyna1 or ""
         local d1 =
        local d2 = row.druzyna2 or ""
            row.druzyna1 or ""


         local tekst =
         local d2 =
             d1 .. " " .. d2
             row.druzyna2 or ""


         local strona =
         local strona =
             row.strona_meczu or ""
             row.strona_meczu or ""


         if strona ~= "" then
 
        local tekst =
            d1 .. " – " .. d2
 
 
         if strona ~= "" then


             return "[[" ..
             return "[[" ..
Linia 171: Linia 176:


         end
         end


         return tekst
         return tekst
Linia 178: Linia 184:


     -- =====================================================
     -- =====================================================
     -- PARSOWANIE KWARTY
     -- PARSOWANIE CZĘŚCI WYNIKU
     -- =====================================================
     -- =====================================================


     local function parseCzesciowy(value)
     local function parseWynikCzesciowy(value)


         if value == nil or value == "" then
         if value == nil or value == "" then
Linia 199: Linia 205:
         end
         end


         return tonumber(a), tonumber(b)
         return
            tonumber(a),
            tonumber(b)


     end
     end
    -- =====================================================
    -- WARUNEK H2H
    -- =====================================================
    local whereH2H =
        "(" ..
        "(Mecze.nazwa_statystyki1='" ..
        team1SQL ..
        "' AND " ..
        "Mecze.nazwa_statystyki2='" ..
        team2SQL ..
        "')" ..
        " OR " ..
        "(Mecze.nazwa_statystyki1='" ..
        team2SQL ..
        "' AND " ..
        "Mecze.nazwa_statystyki2='" ..
        team1SQL ..
        "')" ..
        ")"




     -- =====================================================
     -- =====================================================
     -- POBRANIE MECZÓW
     -- POBRANIE MECZÓW
    --
    -- UWAGA:
    -- pola nazywają się KWARTA1, KWARTA2 itd.
    -- a nie KWART1.
     -- =====================================================
     -- =====================================================


     local fieldsMecze =
     local fieldsMecze = table.concat({
        table.concat({
 
        "Mecze.id=mecz",


            "M.id=mecz",
        "Mecze.data=data",
            "M.data=data",
        "Mecze.sezon=sezon",
            "M.sezon=sezon",


            "M.druzyna1=druzyna1",
        "Mecze.druzyna1=druzyna1",
            "M.druzyna2=druzyna2",
        "Mecze.druzyna2=druzyna2",


            "M.nazwa_statystyki1=ns1",
        "Mecze.nazwa_statystyki1=ns1",
            "M.nazwa_statystyki2=ns2",
        "Mecze.nazwa_statystyki2=ns2",


            "M.gole1=gole1",
        "Mecze.gole1=gole1",
            "M.gole2=gole2",
        "Mecze.gole2=gole2",


            "M.wynik=wynik",
        "Mecze.wynik=wynik",
            "M.wynik_do_przerwy=wynik_do_przerwy",
        "Mecze.wynik_do_przerwy=wynik_do_przerwy",


            "M.kwarta1=kwarta1",
        "Mecze.kwarta1=kwarta1",
            "M.kwarta2=kwarta2",
        "Mecze.kwarta2=kwarta2",
            "M.kwarta3=kwarta3",
        "Mecze.kwarta3=kwarta3",
            "M.kwarta4=kwarta4",
        "Mecze.kwarta4=kwarta4",


            "M.dogrywka1=dogrywka1",
        "Mecze.dogrywka1=dogrywka1",
            "M.dogrywka2=dogrywka2",
        "Mecze.dogrywka2=dogrywka2",
            "M.dogrywka3=dogrywka3",
        "Mecze.dogrywka3=dogrywka3",


            "M.hala=hala",
        "Mecze.hala=hala",
            "M.widzowie=widzowie",
        "Mecze.widzowie=widzowie",
            "M.sedziowie=sedziowie",
        "Mecze.sedziowie=sedziowie",
            "M.strona_meczu=strona_meczu"
        "Mecze.strona_meczu=strona_meczu"


        }, ",")
    }, ",")




     local mecze =
     local mecze =
         mw.ext.cargo.query(
         mw.ext.cargo.query(
             "Mecze=M",
             "Mecze",
             fieldsMecze,
             fieldsMecze,
             {
             {
                 where =
                 where = whereH2H,
                    "(" ..


                    "(M.nazwa_statystyki1='" ..
                orderBy =
                     team1SQL ..
                     "Mecze.data ASC",
                    "' AND " ..
                    "M.nazwa_statystyki2='" ..
                    team2SQL ..
                    "')" ..


                    " OR " ..
                 limit = 5000
 
                    "(M.nazwa_statystyki1='" ..
                    team2SQL ..
                    "' AND " ..
                    "M.nazwa_statystyki2='" ..
                    team1SQL ..
                    "')" ..
 
                    ")",
 
                orderBy =
                    "M.data ASC",
 
                 limit = 5000
             }
             }
         )
         )
Linia 394: Linia 412:
         if #lista == 0 then
         if #lista == 0 then


             item.wartosc = wartosc
             item.wartosc =
                wartosc


             table.insert(
             table.insert(
Linia 416: Linia 435:
             }
             }


             item.wartosc = wartosc
             item.wartosc =
                wartosc


             return lista
             return lista


         elseif wartosc == obecna then
         elseif wartosc == obecna then


             item.wartosc = wartosc
             item.wartosc =
                wartosc


             table.insert(
             table.insert(
Linia 430: Linia 452:


         end
         end


         return lista
         return lista
Linia 442: Linia 465:
     for _, row in ipairs(mecze) do
     for _, row in ipairs(mecze) do


         local zdobyte, stracone =
         local zdobyte,
            stracone =
             wynikDruzyny(row)
             wynikDruzyny(row)


Linia 448: Linia 472:
             miejsce(row)
             miejsce(row)


         if zdobyte and stracone and miejsceMeczu then
 
         if zdobyte and
            stracone and
            miejsceMeczu then
 


             local wynikMeczu
             local wynikMeczu


             if zdobyte > stracone then
             if zdobyte > stracone then
                 wynikMeczu = "W"
                 wynikMeczu = "W"


             elseif zdobyte < stracone then
             elseif zdobyte < stracone then
                 wynikMeczu = "P"
                 wynikMeczu = "P"


             else
             else
                 wynikMeczu = "R"
                 wynikMeczu = "R"
             end
             end




             -- =============================================
             -- =============================================
             -- BILANS OGÓŁEM
             -- OGÓŁEM
             -- =============================================
             -- =============================================


             local b =
             local b =
                 bilans.wszystkie
                 bilans.wszystkie


             b.mecze =
             b.mecze =
Linia 483: Linia 517:


             if wynikMeczu == "W" then
             if wynikMeczu == "W" then
                 b.wygrane =
                 b.wygrane =
                     b.wygrane + 1
                     b.wygrane + 1


             elseif wynikMeczu == "P" then
             elseif wynikMeczu == "P" then
                 b.przegrane =
                 b.przegrane =
                     b.przegrane + 1
                     b.przegrane + 1
             end
             end




             -- =============================================
             -- =============================================
             -- BILANS DOM / WYJAZD
             -- DOM / WYJAZD
             -- =============================================
             -- =============================================


             b =
             local bd =
                 bilans[miejsceMeczu]
                 bilans[miejsceMeczu]


            b.mecze =
                b.mecze + 1


             b.punktyZdobyte =
             bd.mecze =
                 b.punktyZdobyte +
                bd.mecze + 1
 
            bd.punktyZdobyte =
                 bd.punktyZdobyte +
                 zdobyte
                 zdobyte


             b.punktyStracone =
             bd.punktyStracone =
                 b.punktyStracone +
                 bd.punktyStracone +
                 stracone
                 stracone




             if wynikMeczu == "W" then
             if wynikMeczu == "W" then
                 b.wygrane =
 
                     b.wygrane + 1
                 bd.wygrane =
                     bd.wygrane + 1


             elseif wynikMeczu == "P" then
             elseif wynikMeczu == "P" then
                 b.przegrane =
 
                     b.przegrane + 1
                 bd.przegrane =
                     bd.przegrane + 1
 
             end
             end




             -- =============================================
             -- =============================================
             -- REKORDY MECZOWE
             -- REKORD MECZOWY
             -- =============================================
             -- =============================================


             local item = {
             local itemMeczu = {


                 tekst =
                 tekst =
Linia 555: Linia 596:


                 local lista =
                 local lista =
                     rekordyMeczowe.
                     rekordyMeczowe
                    zwyciestwo[miejsceMeczu]
                        .zwyciestwo
                        [miejsceMeczu]


                 if #lista == 0 then