2016-11-14 32 views
1

我正在制作一个小型足球预测网站,我需要的一项功能是从包含过去结果的数据库生成排名表。我的数据库有5列;生成总体排名表

Fixture_ID。

Home_team。

Away_team。

Htgoals(主队进球数)。

Atgoals(客队进球数)。

我有两个疑问,在家里玩,并从家里

Home-" Select results.Home_team, 
SUM(if(results.Htgoals > results.Atgoals,3,0)) AS W, 
SUM(IF(results.Htgoals = results.Atgoals,1,0)) AS D, 
SUM(IF(results.Htgoals < results.Atgoals,1,0)) AS L 
from results 
GROUP BY results.Home_team 
order by W desc"; 

Away table-" Select results.Away_team, 
SUM(if(results.Atgoals > results.Htgoals,3,0)) AS W, 
SUM(IF(results.Atgoals = results.Htgoals,1,0)) AS D, 
SUM(IF(results.Atgoals < results.Htgoals,1,0)) AS L 
FROM results 
GROUP BY results.Away_team 
ORDER BY W DESC"; 

打客场时才返回排名表的球队,我怎样才能;

1.Do工会通过点的数量,而不是胜

的数量产生的总体排名表

2.Rank队

+0

那么你为每场比赛输入2行?我认为你需要重新考虑数据模型。 –

回答

1

您的解决方案是不是远离查询,我会用。我会在一个子查询在外部查询相结合的2个查询,而不group by子句并做组由相加胜,负,平,并指出:

select team, sum(W) as W, sum(D) as D, sum(L) as L, sum(W * 3 + D) as Points 
FROM 
((Select results.Home_team as team, 
if(results.Htgoals > results.Atgoals,1,0) AS W, 
IF(results.Htgoals = results.Atgoals,1,0) AS D, 
IF(results.Htgoals < results.Atgoals,1,0) AS L 
from results) 
UNION 
(Select results.Away_team, 
if(results.Atgoals > results.Htgoals,3,0) AS W, 
IF(results.Atgoals = results.Htgoals,1,0) AS D, 
IF(results.Atgoals < results.Htgoals,1,0) AS L 
FROM results)) t 
GROUP BY team 
ORDER BY Points desc 

在计算我为胜利假定3分1抽签。