2016-11-14 8 views
1

私は小さなサッカー予測ウェブサイトを作っています。私が必要とする機能は、過去の結果を含むデータベースからリーグテーブルを生成することです。私のDBには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"; 

から離れてプレイする場合にのみ、チームのためにリーグテーブルを返す2つのクエリを持ってどのようにすることができます私は。

1.Do全体のリーグテーブルを生成するために労働組合

+0

したがって、一致ごとに2つの行を入力しますか?私はあなたがデータモデルを再考する必要があると思います。 –

答えて

1

あなたのソリューションは、その遠く、私が使用するクエリからでないポイントの数ではなく、勝利数で

2.Rankチーム。私は、サブクエリでgroup by句なしで2つのクエリを組み合わせ、外側のクエリで合計する勝利、損失、描画し、ポイントグループを行うだろう:私は勝利のために3を前提とポイントを計算する際

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 

と1つは抽選です。

関連する問題