根据原始表行输入从连接的MySQL列获取MAX值

时间:2012-11-20 12:03:04

标签: php mysql left-join inner-join max

标题可能有点混乱,但我想没有简单的说法。这就是问题所在:

我有两张桌子。一个列出了足球比赛,其中约有3000个,每个都有独立的ID。第二个表保存了赔率,全部在一个表中,每行有一个ID,以及三列Home,Draw和Away for odds。

当我想为特定匹配(添加到WHERE子句的ID)提取max Home赔率时没有问题。检查大约30行并返回最大值。

当我想检查每个匹配项的所有最大值时会出现问题,因为所有Home赔率都在同一列中。因此,对于所有匹配,将返回整个列的最大值,而不是与匹配相关的值。

灯具表包含有关匹配的信息。它很简单,有3列,另外还有3列,应该从另一个表中提取最高值:

匹配ID,事件名称,开始日期,TopHomeOdds,TopDrawOdds,TopAwayOdds。

odds表有多行用于同一场比赛。

match ID, event name, bookmaker, homeOdds, drawOdds, awayOdds

123456 TeamA-TeamB Bookmaker1 1.60 3.00 4.05

123456 TeamA-TeamB Bookmaker2 1.55 3.05 4.00

123456 TeamA-TeamB Bookmaker3 1.65 2.95 4.10

我想提取最大值(在上面的示例中它将是1.65,3.05,4.10),因此我可以将这些值插入第一个表中。插入不是问题,获取最大值是。我想应该使用一些聪明的JOIN查询,这是你们其中一个人介入的地方......提前谢谢。

这是不准确返回所有homeOdds,drawOdds和

的最大值的代码
awayOdds, so the output is something like:

123456 match1 startdate 29.00 4.00 13.50

234567 match2 startdate 29.00 4.00 13.50

345678 match3 startdate 29.00 4.00 13.50

所有结果都是相同的,因为最大值与匹配本身无关,但返回整列的一般最大值。

    SELECT fixtures.matchid AS eventid, fixtures.matchdate AS eventstartdate,
    fixtures.eventname AS eventname, MAX(odds.homeOdds) AS TopHomeOdds, 
    MAX(odds.drawOdds) AS TopDrawOdds, MAX(odds.awayOdds) AS TopAwayOdds 
    FROM
    fixtures
    INNER JOIN odds ON odds.matchid=fixtures.matchid

最后一部分,一般的INNER JOIN,就是问题所在。我希望它对匹配ID有选择性,我希望它只返回一个列的最大值,该列的行ID与第一个表中的匹配相关。

1 个答案:

答案 0 :(得分:0)

找到解决方案的时间少于发布问题的时间。

如果将GROUP BY eventid添加到查询中,它就像魅力一样。

    SELECT fixtures.matchid AS eventid, fixtures.matchdate AS eventstartdate,
    fixtures.eventname AS eventname, MAX(odds.homeOdds) AS TopHomeOdds, 
    MAX(odds.drawOdds) AS TopDrawOdds, MAX(odds.awayOdds) AS TopAwayOdds 
    FROM
    fixtures
    INNER JOIN odds ON odds.matchid=fixtures.matchid
    GROUP BY eventid
相关问题