2012-07-13 53 views
0

我在以下情况下苦苦挣扎:MySQL JOIN,只能得到最大值

我有一个用户表,其中包含插件的作者。我有一个插件的插件(名称和ID)。我也有一个版本表。该版本表包含所有已发布插件的版本,例如1.0,1.1等。现在版本记录还包含mcversions,它是插件的引擎版本。

这里是我进行的查询:

SELECT 
`plugins`.`name`, 
users.username, 
versions.version, 
mcversions.version 
FROM 
users 
INNER JOIN `plugins` ON `plugins`.author = users.id 
INNER JOIN versions ON versions.id = `plugins`.id AND versions.time 
INNER JOIN mcversions ON versions.mcversion = mcversions.id 

现在有一个问题:我只想要得到的版本,并属于其中versions.time是最高版本的mcversion(这是一个时间戳)。 所以我想要一个名称,作者,最新版本和最新版本的mcversion插件列表。

我任何人都可以帮助我,我会非常高兴!

〜巴斯

回答

1
SELECT 
`plugins`.`name`, 
users.username, 
maxvers.version, 
mcversions.version 
FROM 
users 
INNER JOIN `plugins` ON `plugins`.author = users.id 

INNER JOIN (SELECT version, MAX(time), id FROM versions) AS maxvers ON maxvers.id = `plugins`.id 

INNER JOIN mcversions ON versions.mcversion = mcversions.id 

我没有带测试这一点,但如果你使用子查询找到最大行(因为你通常会),只绘制从子查询,而不是整个版本表做你想做的事。

+0

感谢您的回复,但我收到以下错误: [错误] 1064 - 您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以在'FROM版本'附近使用正确的语法)AS maxvers ON maxvers.id ='plugins'.id – Basaa 2012-07-13 13:52:47

+0

我有一个额外的)'SELECT version,MAX(time),id )<---'。不知道这是否能解决它。更改为',MAX(time),id FROM' – StuckAtWork 2012-07-13 16:04:21

+0

在代码中进行了一些修复之后,我得到一个空的结果:( – Basaa 2012-07-13 19:06:33