【发布时间】:2012-11-20 12:03:04
【问题描述】:
标题可能有点混乱,但我想没有简单的方法可以说出来。这就是问题所在:
我有两张桌子。其中一个列出了足球比赛,其中大约 3.000 场,每场都有单独的 ID。第二个表包含投注赔率,全部在一个表中,每行有一个 ID,赔率分为 Home、Draw 和 Away 三列。
当我想提取特定比赛的最大主场赔率时没有问题(ID 添加到 WHERE 子句)。检查大约 30 行并返回最大值。
当我想检查每场比赛的所有最大值时,就会出现问题,因为所有主场赔率都在同一列中。因此,对于所有匹配,将返回整列的最大值,而不是与匹配相关的那个。
fixtures 表包含有关比赛的信息。很简单,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 的列的最大值。
【问题讨论】:
-
丹,在这里查看一些好的答案:stackoverflow.com/questions755918。特别是 bobince 的回答。
-
谢谢,看来 GROUP BY 是答案。
标签: php mysql left-join inner-join max