如何使用SQL和PHP获取某个排序组中的#

时间:2011-05-31 06:34:30

标签: php sql

情景:

我有一张名为gamesstats的游戏统计信息表。

我获得了一支球队(对我而言,重要的部分是身份),联赛和赛季。

现在我可以查看球队使用我的比赛统计数据进行的比赛,只询问那些联赛和赛季的比赛,主队身份或客队ID是我得到的球队ID。 / p>

由此我可以获得该团队所在的游戏,并分别通过HomeStatVisitorStat分别向该家庭或访客团队询问此游戏的统计数据。然后我平均他们并得到关于那支球队的照片。

现在的问题是:

我如何构建这三个数组:团队平均数组(简单,完成),联盟平均数组(简单,不限制团队ID),以及#in the league中的数组球队在这个特定的参数上(比如在联盟中排名第4(所有球队的平均水平)都是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 个答案:

答案 0 :(得分:1)

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

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