2011-05-31 30 views
0

场景:如何使用SQL和PHP获取一些排序组#

我有游戏统计的表称为gamesstats

我给了一个球队(对我来说重要的部分是id),联赛和sesason。

现在我可以通过询问那些联盟和赛季都是给定的以及主队ID或访客团队ID是我给出的团队ID来查看球队使用我的比赛统计进行的比赛。

从那里我可以得到那个团队玩的游戏,并且分别通过HomeStatVisitorStat这个游戏的统计数据。然后我对他们进行平均并得到关于该团队的图片。

现在的问题:

如何建立这三个芯片:一个球队的平均阵列(容易,做),为联盟平均的阵列(简单,就是不限制球队ID),并且在联盟中排名第二的球队是在这个特定的参数上(比如联盟中的第四(所有球队平均)在做2分投篮)。

SQL的一个位,所以你就会明白它的外观:

SELECT \"All Games\" as Flag, count(*) as Games, avg(s.P2M) as P2M, avg(s.P2A) as P2A, 100*avg(s.P2M)/avg(s.P2A) as P2P, 
     avg(s.P3M) as P3M, avg(s.P3A) as P3A, 100*avg(s.P3M)/avg(s.P3A) as P3P, 
     avg(s.FTM) as FTM, avg(s.FTA) as FTA, 100*avg(s.FTM)/avg(s.FTA) as FTP, 
     avg(s.OFFENSE) as OFFENSE, avg(s.DEF) as DEF, avg(s.TOT) as TOT, 
     avg(s.AST) as AST, avg(s.TO) as TurnO, avg(s.ST) as ST, avg(s.FV) as FV, avg(s.CM) as CM, avg(s.PTS) as PTS, 
     (avg(s.TOT) + avg(s.AST) + avg(s.ST) + avg(s.PTS) + avg(s.P2M) + avg(s.P3M) + avg(s.FTM) + avg(s.RV) + avg(s.FV)) 
     - (avg(s.TO) + avg(s.P3A) + avg(s.P3A) + avg(s.FTA) + avg(s.AG) + avg(s.CM)) as EFF 
     FROM gamesstats AS gs, stats AS s 
     WHERE gs.$homeOrVisitor = s.ID 
     AND gs.HomeTeamID = $ESCteam 
     AND gs.SeasonStart = $ESCseason 
     AND gs.LeagueID = $ESCleague 

我想,因为我们正在谈论巨大的表(30K +数据)更喜欢快速的解决方案。 如果需要,将进行编辑。

回答

1

对不起,我真的不明白你真正想要什么,因为你在说一切都“轻松完成”。但是我可以建议你一点关于使你的SQL更快。您不应该在SQL中使用如此多的AVG()调用。只需选择所有截然不同的 AVG()是您需要的,然后在PHP中计算所有其他值。例如,你应该在SQL中选择avg(s.P3M)作为P3M,avg(s.P3A)作为P3A,但是计算P3P AS $ row ['P3P'] = 100 * $ row ['P3M']/$ row [ 'P3A'];在PHP中,以及所有AVG()总和也是如此。 PHP比MySql更容易扩展,而且它的运行速度也会更快。

UPD:如果您要求如何通过某个字段获取行位置 - 只需选择具有该字段较大值的所有行的COUNT()并添加“1”。

+0

不是一切都很容易完成,只是两件事情。我仍然不能完成第三个,#联赛。 – Vadiklk 2011-05-31 07:40:23

+0

这应该给你的想法:SELECT COUNT(*)FROM(SELECT AVG(something)as avg_smthing FROM'gamesstats' WHERE LeagueId = $ ESCleague AND SeasonStart = $ ESCseason GROUP BY HomeTeamId)AS tbl \t WHERE avg_smthing>(SELECT AVG (something)FROM'gamesstats' WHERE LeagueId = $ ESCleague和SeasonStart = $ ESCseason AND HomeTeamId = $ ESCteam); – XzKto 2011-05-31 07:57:43

+0

如何选择所有不同的平均值?这会帮助我。 – Vadiklk 2011-05-31 17:31:26