Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 连接查询出错_Mysql - Fatal编程技术网

Mysql 连接查询出错

Mysql 连接查询出错,mysql,Mysql,此查询未按预期工作。它选择了一个奇怪的用户,有时甚至一个也没有 查询应: -从游戏表中选择一个随机游戏 -从格式表中选择随机格式 -选择在该游戏中排名的用户,但仅从所选格式中选择 因此,如果随机选择的是FIFA12Xbox360,它将找到所有格式类型为Xbox360并在FIFA12上排名的用户 表格结构如下: SELECT r.game, u.username, r.userid, r.points, u.format FROM ".TBL_RANKING." r INNER JO

此查询未按预期工作。它选择了一个奇怪的用户,有时甚至一个也没有

查询应: -从游戏表中选择一个随机游戏 -从格式表中选择随机格式 -选择在该游戏中排名的用户,但仅从所选格式中选择

因此,如果随机选择的是FIFA12Xbox360,它将找到所有格式类型为Xbox360并在FIFA12上排名的用户

表格结构如下:

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