Mysql 连接查询出错
此查询未按预期工作。它选择了一个奇怪的用户,有时甚至一个也没有 查询应: -从游戏表中选择一个随机游戏 -从格式表中选择随机格式 -选择在该游戏中排名的用户,但仅从所选格式中选择 因此,如果随机选择的是FIFA12Xbox360,它将找到所有格式类型为Xbox360并在FIFA12上排名的用户 表格结构如下:Mysql 连接查询出错,mysql,Mysql,此查询未按预期工作。它选择了一个奇怪的用户,有时甚至一个也没有 查询应: -从游戏表中选择一个随机游戏 -从格式表中选择随机格式 -选择在该游戏中排名的用户,但仅从所选格式中选择 因此,如果随机选择的是FIFA12Xbox360,它将找到所有格式类型为Xbox360并在FIFA12上排名的用户 表格结构如下: SELECT r.game, u.username, r.userid, r.points, u.format FROM ".TBL_RANKING." r INNER JO
SELECT r.game, u.username, r.userid, r.points, u.format
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 name
FROM ".TBL_FORMAT."
WHERE active = '1'
ORDER BY rand() LIMIT 1)
ORDER BY r.points DESC LIMIT 5
有人看到这里有问题吗?尝试使用左连接进行子查询
*tbl_ranking*
id
userid
game
points
type
*tbl_users*
id
username
format
*tbl_game*
id
name
*tbl_format*
id
name
固定的!太好了,你能解释一下代码吗?这样我就能理解主要的变化和原因了。我使用了左连接,它在WHERE subquerys语句中反映了你的条件,并使用temp1.name的条件消除了所有空值!=''和temp2.name!=''
SELECT r.game, u.username, r.userid, r.points, u.format
FROM TBL_RANKING r
INNER JOIN TBL_USERS u
ON u.id = r.userid
LEFT JOIN (SELECT name FROM ".TBL_GAME." WHERE active = '1' ORDER BY rand() LIMIT 1) temp1
ON r.game=temp1.name
LEFT JOIN (SELECT name FROM ".TBL_FORMAT." WHERE active = '1' ORDER BY rand() LIMIT 1) temp2
ON u.format=temp2.name
WHERE r.type = '1'
AND temp1.name != ''
AND temp2.name != ''
ORDER BY r.points DESC LIMIT 5