Aas*_*zam 13 php mysql sql-order-by
我一直试图找到关于这个主题的东西,我似乎找不到任何东西,这里有几个问题,但它们对我的特定项目不起作用.
我问了一个关于更新表的类似问题,但它不能用于我真正想要的是结果列表.
--------------------------------------------------------
|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 |
--------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
基本上我希望能够按顺序创建一个排名表的排名表,我想动态呈现这个表而不是把它放到数据库中
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
Run Code Online (Sandbox Code Playgroud)
POS =位置W =赢得D =平局L =损失F =目标得分A =目标得分与GD =目标差异Pts =点数
我认为最有效的方法是分配胜利,平局和失利,将得分和进球数进行总结,并在回显数据时计算 - 计算比赛总数和得分.
但是我如何分配胜利或亏损呢?并计算得分和进球的目标?
a'r*_*a'r 17
首先将得分表联合在一起,将家庭主队与客队交换,然后交换目标数.这为您提供了一些易于聚合的源数据,并且生成记分卡的查询是这样的:
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;
Run Code Online (Sandbox Code Playgroud)