RJWEBDESIGN - tvorba webových prezentací

Novinky

22.04.2008
Portál Španělský fotbal byl spuštěn, zatím probíhá testování více

06.03.2008
Pracuji na fotbalovém portálu zabývající se španělským fotbalem

12.01.2008
Dokončen fotbalový rezervační systém Profi Football více

08.01.2008
Spuštění modulu Eshopu pro firmu AZ-SportCzech více

04.01.2008
Dokončena prezentace firmy STRAIGHT CONSULT více


Reklama

Španělský fotbal - spanelskyfotbal.cz

Cizí krmivo


Něco málo o mé osobě

Je mi 26 let, bydlím v hlavním městě ČR. Webdesignem a programováním se zabývám již několik let ... více


Snažím se poradit


Sport, sleduji, hraji


Hlavní Logo

Poslední komentáře

  • nechapem -

    nechapem

  • RJ -

    [131]

    Jak zkopirovat? Vse podstatne mate v clanku, deklaraci funkce a jeji pouziti. Nic vic v tom neni

  • Karel Kaleta -

    Dobrý den, potřeboval bych se zeptat, jestli by jste mi nemohl zkopírovat soubor uložený na vaší adrese http://www.rjwebdesign.net/…ss/index.php a poíslat mejlem. Nevím jak rozjet vaši RSS čtečku a s tímhle to mám jednodušší. Díky za odpověď.

  • RJ -

    [129] To bych nedelal, kdyby zmenili treba razeni men a napr. EURO by se z radku 5 presunulo na radek 8 tak by ti to nevyslo .. zkus to pres to pole, bude to univerzalnejsi

  • kuba -

    [128]jo dík, už jsem to vyřešil, sice ne přes pole, ale trošku kostrbatě přes číslo řádku měny

Statistika

  • Článků celkem: 12
  • Komentářů celkem: 27

Blogspot » PHP » Generovaní nejen fotbalové tabulky

Generovaní nejen fotbalové tabulky

Neděle, 13 .Ledna 2008, 07:48, prečteno 497x

V tomto článku si ukážeme jak generovat fotbalovou tabulku. S menšimi úpravami můžeme samozřejme generovat nejenom fotbalovou tabulku ale i tabulku z dalších sportovních odvětví.

if(isset($_POST['do'])) 
{

    if($_POST['b1']==$_POST['b2']) { //remiza
    mysql_query("UPDATE tabulka SET r=r+1, gf = gf+$_POST[b1], ga = ga+$_POST[b2], pz=pz+1, body=body+1 WHERE id = '$_POST[1]'");   //prvni

    mysql_query("UPDATE tabulka SET r=r+1, gf = gf+$_POST[b1], ga = ga+$_POST[b2], pz=pz+1, body=body+1 WHERE id = '$_POST[2]'"); //druhy
        
    } elseif($_POST['b1']<$_POST['b2']) { //vyhral b2
    
  mysql_query("UPDATE tabulka SET p=p+1, gf = gf+$_POST[b1], ga = ga+$_POST[b2],pz=pz+1 WHERE id = '$_POST[1]'");   //prvni

    mysql_query("UPDATE tabulka SET v=v+1, gf = gf+$_POST[b2], ga = ga+$_POST[b1], pz=pz+1, body=body+3 WHERE id = '$_POST[2]'"); //druhy   
    
    } elseif($_POST['b1']>$_POST['b2']) { //vyhral b1
    
    mysql_query("UPDATE tabulka SET v=v+1, gf = gf+$_POST[b1], ga = ga+$_POST[b2], pz=pz+1, body=body+3 WHERE id = $_POST[1]"); //prvni

    mysql_query("UPDATE tabulka SET p=p+1, gf = gf+$_POST[b2], ga = ga+$_POST[b1], pz=pz+1 WHERE id = $_POST[2]"); //druhy      
}
}

Výhodou: je velmi rychlý výběr z DB

Nevýhodou: může být oprava údajů. Budeme si muset vytvořit další formulář a zpracující skript, který by nám zpětně odmazal / upravil data. Je to spousty zbytečného skriptovaní navíc.

Způsob číslo 2

Tento způsob spočívá v tom, že si vytáhnem z databáze všechny odehrané zápasy, poukládáme si data do pole ( rozhodovacími mechanismy zjistíme kdo měl kolik výher, remíz, proher atd. ) a výsledné pole zapíšeme do databáze za jednotlivé týmy.

function reCount()
  {
     $sql = "SELECT d_tym, h_tym, d_goly, h_goly, kontumace, trest1, trest2
             FROM vysledky 
             WHERE schvaleno = 2
             AND id_souteze = $this->soutezID";


             
     $msql = mq($sql);
     if (mnr($msql))
     {
        // inicializace
        $this->init(&$data);
        
        while ($r = mfo($msql))
        {
          // nastaveni promennych
          $domaci = $r->d_tym;
          $hoste  = $r->h_tym;
          $g1     = $r->d_goly;
          $g2     = $r->h_goly;
          $kontumace = $r->kontumace;
          $trest1 = $r->trest1;
          $trest2 = $r->trest2;
          
          // vypocet
          
          // domaci vyhrali
          if ($g1 > $g2 && $kontumace != 3)
          {
            // nastavime domaci
            $data[$domaci]["pz"]++;
            $data[$domaci]["v"]++;
            //$data[$domaci]["r"]++;
            //$data[$domaci]["p"]++;
            $data[$domaci]["gf"] += $g1;
            $data[$domaci]["ga"] += $g2;
            $data[$domaci]["pts"] += 3;
            $data[$domaci]["trest"] += $trest1;
            
            // nastavime hosty
            $data[$hoste]["pz"]++;
            //$data[$hoste]["v"]++;
            //$data[$hoste]["r"]++;
            $data[$hoste]["p"]++;
            $data[$hoste]["gf"] += $g2;
            $data[$hoste]["ga"] += $g1;
            //$data[$hoste]["pts"] += 3;
            $data[$hoste]["trest"] += $trest2;
            
          }
         // vyhrali hoste 
         elseif ($g1 < $g2 && $kontumace != 3)
         {
            // nastavime domaci
            $data[$domaci]["pz"]++;
            //$data[$domaci]["v"]++;
            //$data[$domaci]["r"]++;
            $data[$domaci]["p"]++;
            $data[$domaci]["gf"] += $g1;
            $data[$domaci]["ga"] += $g2;
            //$data[$domaci]["pts"] += 3;
            $data[$domaci]["trest"] += $trest1;
            
            // nastavime hosty
            $data[$hoste]["pz"]++;
            $data[$hoste]["v"]++;
            //$data[$hoste]["r"]++;
            //$data[$hoste]["p"]++;
            $data[$hoste]["gf"] += $g2;
            $data[$hoste]["ga"] += $g1;
            $data[$hoste]["pts"] += 3; 
            $data[$hoste]["trest"] += $trest2;        
         } 
        // remiza 
        elseif ($g1 == $g2 &&  $kontumace != 3)
        {
            // nastavime domaci
            $data[$domaci]["pz"]++;
            //$data[$domaci]["v"]++;
            $data[$domaci]["r"]++;
            //$data[$domaci]["p"]++;
            $data[$domaci]["gf"] += $g1;
            $data[$domaci]["ga"] += $g2;
            $data[$domaci]["pts"] += 1;
            $data[$domaci]["trest"] += $trest1;
            
            // nastavime hosty
            $data[$hoste]["pz"]++;
            //$data[$hoste]["v"]++;
            $data[$hoste]["r"]++;
            //$data[$hoste]["p"]++;
            $data[$hoste]["gf"] += $g2;
            $data[$hoste]["ga"] += $g1;
            $data[$hoste]["pts"] += 1; 
            $data[$hoste]["trest"] += $trest2;                
        }
        // kontumace pro oba 
        elseif ($g1 == $g2 &&  $kontumace == 3)
        {
            // nastavime domaci
            $data[$domaci]["pz"]++;
            //$data[$domaci]["v"]++;
            //$data[$domaci]["r"]++;
            $data[$domaci]["p"]++;
            $data[$domaci]["gf"] += 0;
            $data[$domaci]["ga"] += 3;
            //$data[$domaci]["pts"] += 1;
            $data[$domaci]["trest"] += $trest1;
            
            // nastavime hosty
            $data[$hoste]["pz"]++;
            //$data[$hoste]["v"]++;
            //$data[$hoste]["r"]++;
            $data[$hoste]["p"]++;
            $data[$hoste]["gf"] += 0;
            $data[$hoste]["ga"] += 3;
            //$data[$hoste]["pts"] += 1;
            $data[$hoste]["trest"] += $trest2;               
        }        
          
      } // while end
    } // numrows > 0 ?
  

  
  
  } 

 function insertData($data)
  {
     if (is_array($data))
     {
       foreach ($data as $tymID => $pole)
       {
         $ins  = "INSERT INTO tabulka_poradi SET ";
         $ins .= " id_tymu = $tymID,
                   kolo = $this->round,
                   id_souteze = $this->soutezID,
                   pz = '{$data[$tymID]["pz"]}',
                   v = '{$data[$tymID]["v"]}',
                   r = '{$data[$tymID]["r"]}',
                   p = '{$data[$tymID]["p"]}',
                   gf = '{$data[$tymID]["gf"]}',
                   ga = '{$data[$tymID]["ga"]}',
                   pts = '{$data[$tymID]["pts"]}',
                   trest = '{$data[$tymID]["trest"]}'
                 ";
         
         //echo $ins . "<br />";
         $ins = mq($ins);    
         //echo mysql_error();     
       }
     }
  }

Výhoda: pořád se jedná o velmi rychlý počin a pokud se stane , že bychom nějaký zápas zrušili nebo mu potřebovali upravit výsledek, není nic jednoduššího než tabulku z DB vymazat a znovu ji přegenerovat.

Nevýhoda: pokud se bude jednat o větší množství zápasů ( tisíce položek), netuším co to udělá s pamětí, může dojít k alokaci paměti a shození stránky. Ja jsem generovával vždy několik desítek či stovek zápasů a neměl jsem problém. Další nevýhodu vidím v tom, že pokud si budete chtít tabulku zobrazovat po jednotlivých kolech, budete Vám databáze nepřijemně narůstat.

Způsob číslo 3

Všechno za Vás vyreší databáze

SELECT
ts.nazev, ts.seo_nazev,
tym,
SUM(W) + SUM(R) + SUM(P) as zapasy,
SUM(W) as vyhry,
SUM(R) as remizy,
SUM(P) as prohry,
SUM(G1) as goly_vstrelene,
SUM(G2) as goly_obdrzene,
SUM(G1) - SUM(G2) as rozdil,
SUM(W) * 3  + SUM(R) * 1 as body

FROM

(


SELECT id_domaci AS tym, SUM(
IF (
g1 > g2, 1, 0
) ) AS W, SUM(
IF (
g1 = g2, 1, 0
) ) AS R, SUM(
IF (
g1 < g2, 1, 0
) ) AS P, SUM( g1 ) AS G1, SUM( g2 ) AS G2
FROM vysledky
WHERE schvaleno = '1'
AND kolo <= $kolo
AND id_souteze = $soutez
GROUP BY tym

UNION ALL

SELECT id_hoste AS tym, SUM(
IF (
g1 < g2, 1, 0
) ) AS W, SUM(
IF (
g1 = g2, 1, 0
) ) AS R, SUM(
IF (
g1 > g2, 1, 0
) ) AS P, SUM( g2 ) AS G1, SUM( g1 ) AS G2
FROM vysledky
WHERE schvaleno = '1'
AND kolo <= $kolo
AND id_souteze = $soutez
GROUP BY tym

) TMP


JOIN  seznam_tymu as ts
ON ts.ID = TMP.tym
GROUP BY tym
ORDER BY body DESC, rozdil  DESC, goly_vstrelene DESC, zapasy DESC, nazev ASC

Výhoda: vše reší tento náročnější SQL dotaz. Neni složitý, jen trošku delší na napsání. Tímto vykreslíme tabulku do konkretního kola a není problém si zobrazit údaje z jiného kola. Pokud potřebujeme opravit zápas, opravujeme ho pouze v konkretní tabulce zápasu a o výsledné zobrazení se nestaráme. Takže časová úspora je myslím zřejmá.

Nevýhoda: bude v tom, že se bude databázový server více namáhat, než kdyby pouze tahal připravená data. On je musí počítat, setřídit a předložit. Pokud tabulku dobře osázíte indexy a těch zápasů tam nebudou tisíce ( žiju v domnění, že zobrazujeme tabulku z konkretní sézony kde proběhlo pár desítek či stovek zápasů), tak se nemusíme bát. Mám ješte složitejší dotaz, pospojováno více tabulek dohromady a výsledky jsou velmi slušné, rychlost je vždy kolem 0,005 s.

Sami si zvolte způsob, který se Vám nejvíce líbí. Tento článek není návodem, který pomocí copy & paste uvedete v pochod. Pokud znáte jiný způsob generování, vyjádřete se do komentáře.

Hodnocení: Počet hlasů: 10

Komentáře

Žádný komentář

Přidat komentář

Nový vzkaz

© 2005 - 2008 RJWEBDESIGN, všechna práva vyhrazena.
Nabízíme: Tvorba www stránek
Kontakt: telefony +420 777 856 657 | E-mail: admin@rjwebdesign.net
Spolupracujeme: Aria Studio, MXART Partnerské weby: Pesonline.cz, EuroFotbal.cz, SpanelskyFotbal.cz

© 2008 RJWEBDESIGN