2011-11-04 15 views
12

Ho cercato di trovare qualcosa su questo argomento e non riesco a trovare nulla, c'erano alcune domande qui ma non hanno funzionato per il mio particolare progetto.come stampare una tabella delle classifiche al volo da una tabella mysql dei risultati di calcio [calcio]?

Ho fatto una domanda simile sull'aggiornamento della tabella ma non funzionerà per quello che effettivamente desidero ecco l'elenco dei risultati.

-------------------------------------------------------- 
|id | hometeam |goalsfor|goalsagainst| awayteam | 
-------------------------------------------------------- 
| 1 |Inter Milan | 3 |  1  | FC Barcelona | 
-------------------------------------------------------- 
| 2 |FC Barcelona | 1 |  0  | Inter Milan | 
-------------------------------------------------------- 
| 3 |Inter Milan | 4 |  0  | AC Milan  | 
-------------------------------------------------------- 
| 4 |AC Milan  | 0 |  2  | Inter Milan | 
-------------------------------------------------------- 
| 5 |Real Madrid | 2 |  0  | AC Milan  | 
-------------------------------------------------------- 
| 6 |AC Milan  | 2 |  2  | Real Madrid | 
-------------------------------------------------------- 
| 7 |FC Barcelona | 2 |  2  | AC Milan  | 
-------------------------------------------------------- 
| 8 |Real Madrid | 2 |  0  | Inter Milan | 
-------------------------------------------------------- 
| 9 |Inter Milan | 3 |  1  | Real Madrid | 
-------------------------------------------------------- 
| 10 |FC Barcelona | 2 |  0  | Real Madrid | 
-------------------------------------------------------- 
| 11 |Real Madrid | 1 |  1  | FC Barcelona | 
-------------------------------------------------------- 

Fondamentalmente voglio essere in grado di creare una tabella classifica classifica le squadre in ordine, vi voglio presentare questa tabella al volo e non metterlo in database

Pos Team   Pld W D L F A GD Pts 
1 FC Barcelona 5 2 3 0 8 5 3 9 
2 Inter Milan  6 2 2 2 11 10 1 8 
3 Real Madrid  6 2 2 2 8 8 0 8 
4 AC Milan  5 0 3 2 8 12 -4 3 

POS = Posizione W = vinto D = pareggio L = perdita F = goal segnati per A = goal segnati contro GD = differenza gol Pts = punti

Penso che il modo più efficiente per farlo sarebbe assegnare vincite, pareggi e sconfitte, somma i goal segnati e i goal segnati contro e quando riecheggiano i dati - calcola il totale nu mber delle partite giocate e dei punti.

Ma come si assegnano le estrazioni o le perdite delle vittorie? E calcola i goal segnati e gli obiettivi contro?

+1

Puoi inserire le intestazioni delle colonne nella tabella in basso in modo da sapere come calcolare ciascuna colonna? – nickb

+1

Hai un'altra tabella che elenca i nomi dei team, o è l'unico modo per ottenerli tutti selezionando un elenco distinto di loro da hometeam e awayteam? – megaflop

+0

@Wazzzy: D Questi sono risultati effettivi di giochi casuali - solo per scopi di esempio, avrò molti risultati - forse 10-15 campionati per gli ultimi 60 - 70 anni - forse averli tutti in una tabella mysql potrebbe essere una cattiva idea, ma ci penserò dopo. Ma potrei aggiungere ulteriori clausole che selezionano le gare in base ai dati che l'utente desidera. –

risposta

12

Prima unione la tabella dei punteggi scambiando l'hometeam con il awayteam e scambiando i conteggi degli obiettivi. Questo vi dà un po 'di dati di origine che può essere facilmente aggregati e la query per generare la carta di punteggio è qualcosa di simile:

select 
    team, 
    count(*) played, 
    count(case when goalsfor > goalsagainst then 1 end) wins, 
    count(case when goalsagainst> goalsfor then 1 end) lost, 
    count(case when goalsfor = goalsagainst then 1 end) draws, 
    sum(goalsfor) goalsfor, 
    sum(goalsagainst) goalsagainst, 
    sum(goalsfor) - sum(goalsagainst) goal_diff, 
    sum(
      case when goalsfor > goalsagainst then 3 else 0 end 
     + case when goalsfor = goalsagainst then 1 else 0 end 
    ) score 
from (
    select hometeam team, goalsfor, goalsagainst from scores 
    union all 
    select awayteam, goalsagainst, goalsfor from scores 
) a 
group by team 
order by score desc, goal_diff desc; 
+2

bello ed elegante :) – roselan

+0

sembra funzionare come non sta restituendo alcun errore - ma solo lavorando su come echo/stampare i dati - non ha dormito abbastanza quindi tutto è un po 'confuso: S –

+0

funziona! lei, signore, è un genio! –

3
// connection stuff 
$sql = 'select * from matchesTable'; 
$result = mysql_query($sql) 

$standings = array(); 
$standingTemplate = array ('matches' => 0, 'wins' => 0, 'draws' => 0, 'losses' => 0, 'goalsfor' => 0, 'goalsagainst' => 0, 'goalsdiff' => 0, 'points' => 0); 

while ($row = mysql_fetch_assoc($result)) 
{ 
    handleMatch($row['hometeam'], $row['goalsfor'], $row['goalsagainst']); 
    handleMatch($row['awayteam'], $row['goalsfor'], $row['goalsagainst']); 

    print_r(usort(standings, 'comparePoints')); // up to you to format the output as you like 
} 

function handleMatch($team, $goalsfor, $goalsagainst) 
{ 
    global $standings, $standingTemplate; 
    if ($goalsfor > $goalsagainst) 
    { 
     $points = 3; 
     $win = 1; 
     $draw = 0; 
     $loss = 0; 
    } 
    elsif ($goalsfor == $goalsagainst) 
    { 
     $points = 1; 
     $win = 0; 
     $draw = 1; 
     $loss = 0; 
    } 
    else 
    { 
     $points = 0 
     $win = 0; 
     $draw = 0; 
     $loss = 1; 
    } 

    if (empty($standings[$team]))$standing = $standingTemplate; 
    else $standing = $standings[$team]; 

    $standing['matches']++; 
    $standing['wins'] += $win; 
    $standing['draws'] += $draw; 
    $standing['losses'] += $loss; 
    $standing['goalsfor'] += $goalsfor; 
    $standing['goalsagainst'] += $goalsagainst; 
    $standing['goalsdiff'] += $goalsfor - $goalsagainst; 
    $standing['points'] += $points; 

    $standings[$team] = $standing; 

} 

function comparePoints($a, $b) 
{ 
    if ($a['points'] == $b['points']) 
    { 
     if ($a['goalsdiff'] == $b['goalsdiff']) return 0; 
     return ($a['goalsdiff'] < $b['goalsdiff']) ? 1 : -1 ; 
    }  
    return ($a['points'] < $b['points']) ? 1 : -1 ; 
} 

NOTE: non ho la prova e tutto, potrebbe essere piccolo insetto (alcuni $ o ; mancanti).

+0

Alcuni piccoli bug come hai detto tu, ma facili da risolvere e il codice funziona ... cool .. thnx. – fjckls

Problemi correlati