2011-11-04 10 views
12

Bu konuyla ilgili bir şeyler bulmaya çalışıyorum ve bir şey bulamıyorum, burada birkaç soru vardı, fakat benim özel projem için çalışmadılar., futbol [soccer] sonuçlarının bir mysql tablosundan anında bir stant tablosunu nasıl çıktı?

Tabloyu güncelleştirmeyle ilgili benzer bir soru sordum, ancak aslında ne istediğimin işe yaramayacağı burada sonuç listesi.

-------------------------------------------------------- 
|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 | 
-------------------------------------------------------- 

Temelde ben anında bu tabloyu sunmak ve veritabanı

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 = Pozisyon koymak değil istediğiniz sırayla ekipleri sıralamasında bir puan durumu tablo oluşturmak için mümkün istiyorum W = won D = Beraberlik L = Kayıp F = Atılan goller A = GD aleyhinde goller = Hedef farkı Pts = Puan

Bunu yapmanın en etkili yolunun kazanımlar, çekilişler ve kayıplar, tahsilat tahsilatı olacağını düşünüyorum. attı ve gol attı ve golleri eklediğinde - toplam nu hesapla oynanan oyunlar ve puanlar.

Kazançları nasıl kazanabilirim? Ve gol attı ve golleri karşı hesaplamak?

+1

Sütun başlıklarını alt tablonun üzerine koyarsak, her bir sütunun nasıl hesaplanacağını biliyoruz? – nickb

+1

Ekip isimlerini listeleyen başka bir masa var mı, yoksa hometeam ve awayteam'den ayrı bir liste seçerek bunları elde etmenin tek yolu var mı? – megaflop

+0

@Wazzzy: D Bunlar rastgele oyunlardan elde edilen sonuçlardır - sadece örnek amaçlı, çok fazla sonuç alacağım - belki son 60 - 70 yıl için 10-15 lig - belki hepsini bir mysql tablosunda bulundurabilir Kötü bir fikir ama daha sonra düşüneceğim. Ancak, kullanıcının istediği verilere göre yarışmalar seçerek ekstra maddeler ekleyebilirim. –

cevap

12

İlk birliktelik skor tablosunu hometeam'i uzatma ile değiştirerek ve takas sayılarını değiştirerek.

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

güzel ve zarif :) – roselan

+0

, herhangi bir hata döndürmüyor - ama sadece nasıl eko/veri çıktısı dışarı çalışıyor gibi çalışıyor gibi görünüyor - yeterince uyumadım her şey biraz puslu: S –

+0

işe yarıyor! siz efendim bir dahisin! –

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 ; 
} 

NOTLAR: Bu skor kartı böyle bir şeydir elde etmeye yönelik kolaylıkla toplanır bazı kaynak veri ve sorguyu verir bunu test etmedi ve tüm küçük böcek olabilir (bazı $ veya ; eksik).

+0

Söylediğiniz gibi bazı küçük hatalar, ama düzeltmek ve kod çalışıyor .. cool .. thnx. – fjckls