MySQL karmaşık futbol ligi Dinamik Sipariş?

2 Cevap php

Aşağıdaki gibi bir futbol ligi için bir tablo 'oyun' var:

date    home_team_id    away_team_id    home_score      away_score
 -          1                 2              6             21
 -          3                 1              7             19

Ben dinamik Kazandı tarafından sipariş ekip kimlikleri bir listesini oluşturmak için nasıl anlamaya olamaz (o zaman için işaret eğer poss)?

-

Ben $ team_id var ama neden sonra bir seferde sadece 1 takım ne zaman iyi çalışır, bu sorgu var, ve bu sorgu düzeyde sipariş için izin vermiyor

((SELECT COUNT(*) FROM `games` WHERE ((`home_score` > `away_score`) AND `home_team_id` = '.$team_id.')) + 
(SELECT COUNT(*) FROM `games` WHERE ((`home_score` < `away_score`) AND `away_team_id` = '.$team_id.'))) AS `wins`

I wonder if i can use this with some form of GROUP, or mySQL can know the $team_id itself? I've also tried some multiple JOINs with the 'team' table but they didn't work either.

Teşekkürler,

Dan

2 Cevap

Belki bu sizin için ne arıyor?

SELECT all_wins.team_id, SUM(all_wins.wins)
FROM (
  SELECT 
     home_team_id as team_id, 
     SUM(IF(home_score > away_score,1,0)) as wins,
     SUM(home_score - away_score) as points
  FROM games
  GROUP BY home_team_id
  UNION ALL
  SELECT 
     away_team_id as team_id, 
     SUM(IF(away_score > home_score,1,0)) as wins,
     SUM(away_score - home_score) as points
  FROM games
  GROUP BY away_team_id
) all_wins
GROUP BY all_wins.team_id
ORDER BY SUM(all_wins.wins), SUM(all_wins.points)

ETA: Orijinal cevap tam değildi, ben bu daha iyi olması gerektiğini düşünüyorum.

Birlikte UNION'd olan iç iki sorgu ev almak ve uzak her takım için kazanır edilir. Dış sorgu sadece ev özetliyor ve uzağa toplam kazanmak sayımı için kazanır.

Şimdi bunu adım adım yapalım:

Evde ve evde skoru kazandı oyunları seçin:

   SELECT COUNT(*) as wins, SUM(G.home_score) as score FROM games G WHERE 
      G.team_id = T.team_id #See 3. query and you'll understand
      G.home_score > away_score

Kullanıcının bu sonuç HOME_GAMES diyelim.

Kazandı oyunlar ve uzak oyun skor seçin:

SELECT COUNT(*) as wins, SUM(G.away_score) as score FROM games G
WHERE 
  G.team_id = T.team_id #See 3. query and you'll understand
  G.away_score > G.home_score

En AWAY_GAMES bu sonucu diyelim.

Toplam kazandı oyunlar ve toplam puanı seçin:

   SELECT (A.wins + H.wins) AS total_wins, (A.score + H.score) AS total_score FROM
   (AWAY_GAMES) AS A, (HOME_GAMES) AS H, teams T 
   ORDER BY total_wins, total_score

==> AWAY_GAMES ve HOME_GAMES yerine hep birlikte koyun:

SELECT (A.wins + H.wins) AS total_wins, (A.score + H.score) AS total_score FROM 
  (SELECT COUNT(*) as wins, SUM(G.away_score) as score FROM games G
   WHERE 
     G.team_id = T.team_id #See 3. and you'll understand
     G.away_score > G.home_score) AS A, 

   (SELECT COUNT(*) as wins, SUM(G.home_score) as score FROM games G 
   WHERE 
      G.team_id = T.team_id #See 3. and you'll understand
      G.home_score > away_score) AS H, 

   teams T
   ORDER BY total_wins, total_score