Mysql - 从一个表中选择一个随机行并将它连接到另一个表中的三行

问题描述:

我有两个表。Mysql - 从一个表中选择一个随机行并将它连接到另一个表中的三行

一个拿着游戏的标题。 另一个是持有玩这些游戏的用户的排名。

SELECT r.game, u.username, r.userid, r.points 
FROM tbl_game g 
INNER JOIN tbl_ranking r ON r.game = g.name 
INNER JOIN tbl_users u ON u.id = r.userid 
WHERE g.active = '1' 
AND r.type = '1' 
ORDER BY rand() , r.points 
LIMIT 3 

这是我的尝试。

我想要做的是从tbl_game表中选择一个随机行,然后将它加入tbl_ranking表中的三个最佳用户。例如,如果Madden是随机选择的,它会找到该游戏的最佳3个用户并返回它们。

任何想法如何在一个查询中做到这一点? 这可能吗?

感谢

编辑 我现在已经尝试什么,我认为是这样做的正确方法。 我有语法错误,如果有人可以帮忙?

SELECT userid, points(
    SELECT name 
    FROM tbl_game 
    WHERE active = '1' 
    ORDER BY rand() 
    LIMIT 1 
    ) AS randgame 
FROM tbl_ranking 
WHERE TYPE = '1' 
AND game = randgame 
ORDER BY points DESC LIMIT 3 

编辑...需要更多添加到查询

有必要选择Xbox 360或PlayStation 3的tbl_format和在任相比较确保只有用户。

SELECT r.game, u.username, r.userid, r.points 
FROM tbl_ranking r 
INNER JOIN tbl_users u ON u.id = r.userid 
WHERE r.type = '1' 
AND r.game = (
     SELECT name 
     FROM tbl_game 
     WHERE active = '1' 
     ORDER BY rand() 
     LIMIT 1) 
AND u.format = (
     SELECT format 
     FROM tbl_format 
     WHERE active = '1' 
     ORDER BY rand() 
     LIMIT 1) 
ORDER BY r.points DESC 
LIMIT 3 

的想法是,你加入到用户表,他们有一个字段format,他们要么是PS3 XBOX360或。因此,当您运行查询时,您可以从tbl_format表中选择ps3或xbox360,将其与用户名进行比较,并从随机选择的游戏中选择一个控制台或另一个控制台上的三个用户!

任何想法?

感谢

+0

你的第二个查询似乎是正确的。你试过了吗? –

+0

是的,但它没有奏效,提供了更好的答案。但是我还有其他需要添加到查询中的内容。我的第三个接近于我之后的事情,之后有一个解释。你能帮我吗? – sark9012

+0

你想要XBox360和PS3的结果,还是仅仅需要其中一个? – MattBelanger

SELECT userid, points 
FROM tbl_ranking 
WHERE TYPE = '1' 
AND game = (SELECT name 
    FROM tbl_game 
    WHERE active = '1' 
    ORDER BY rand() 
    LIMIT 1 
    ) 
ORDER BY points DESC LIMIT 3 

我想这是你想要的

+0

工作完美,但我需要添加一点,我忘了它。我会再次编辑问题,看看你能否帮助我。我会剔除它,因为它是我原来的问题的答案! – sark9012

开始与SELECT userid, points,(加分后的逗号)。