Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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
Php 将两个mysql查询合并为一个?_Php_Mysql - Fatal编程技术网

Php 将两个mysql查询合并为一个?

Php 将两个mysql查询合并为一个?,php,mysql,Php,Mysql,我有一个多人游戏网站,用户每20秒就会收到一份类似这样的游戏列表: $sql1 = mysql_query("SELECT gp.fk_game_id, gp.player_tiles, gp.infoPop, gp.chatbadge, g.lastdraw FROM ".$prefix."_gameplayer gp INNER JOIN ".$prefix."_games g ON gp.fk_game_id = g.game_id

我有一个多人游戏网站,用户每20秒就会收到一份类似这样的游戏列表:

$sql1 = mysql_query("SELECT gp.fk_game_id, gp.player_tiles, gp.infoPop, gp.chatbadge, g.lastdraw FROM ".$prefix."_gameplayer gp
                        INNER JOIN ".$prefix."_games g ON gp.fk_game_id = g.game_id
                    WHERE gp.fk_player_id = $currplayer AND g.invite=0 AND g.deleteby != $currplayer ORDER BY g.lastdraw ASC");  

while($row1 = mysql_fetch_assoc($sql1)){

    $gameid = $row1['fk_game_id'];

    // GET CURRENT GAME OPPONENT ID AND BOARD DATA //
    $sql = mysql_query("SELECT gp.fk_player_id
                              ,gp.last_draw_type
                              ,gp.player_turn
                              ,u.country
                              ,u.username
                              ,u.profileimg
                        FROM ".$prefix."_gameplayer gp
                            INNER JOIN ".$prefix."_users u
                                ON gp.fk_player_id = u.id
                         WHERE gp.fk_player_id!=$currplayer AND gp.fk_game_id=$gameid");
    $row = mysql_fetch_assoc($sql);
如果一个玩家有30个游戏,由于while循环中的mysql_查询,它会使用大量资源

每个游戏都存储在3行的2 db表中

一个包含游戏数据的游戏表行和两个玩家表行,一个用于当前玩家,一个用于对手

这是对手的一排,我必须对其进行第二次查询

是否可以将此行加入到第一个查询中,以便我每20秒只为一个玩家运行一个查询

表架构如下所示:

桌上游戏 游戏编号-整数(11) 时间戳 lastdraw-时间戳 timetodraw-日期时间 袋子瓦片-文本 表\u平铺-文本 新的_平铺-文本 invite-int(11) 随机-整数(11) 主动-整数(11) 完成-整数(11) deleteby-int(11) 警告1-int(11) 警告2-int(11)

桌面游戏玩家 id-int(11) fk_游戏id-int(11) fk_播放器识别码-整数(11) player_tiles-文本 球员抽签-整数(11) 第一张图-整数(11) 球员转身-整型(11) 最后绘制类型-int(11) 球员传球-整数(11) 交换-整数(11) 玩家_win-int(11) 球员积分-整数(11) infoPop-int(11) 查特别克-国际(11)

表格用户 id-int(11) 电子邮件-varchar(255) 用户名-varchar(255) 密码-varchar(50) profileimg-varchar(25) 国家-国际(11) 注册日期 日期-时间戳


希望这有意义,并希望得到帮助:-)

您可以尝试以下方法:

 $sql1 = mysql_query("SELECT gp.fk_player_id,gp.last_draw_type,gp.player_turn, u.country,u.username,u.profileimg,
                    gp.fk_game_id, gp.player_tiles, gp.infoPop, gp.chatbadge, g.lastdraw FROM ".$prefix."_gameplayer gp
                    INNER JOIN ".$prefix."_games g ON gp.fk_game_id = g.game_id 
                    INNER JOIN ".$prefix."_users u ON gp.fk_player_id = u.id
                    WHERE g.invite=0 AND g.deleteby != $currplayer 
                    AND gp.fk_game_id=$gameid ORDER BY g.lastdraw ASC");

您可以尝试以下操作:

 $sql1 = mysql_query("SELECT gp.fk_player_id,gp.last_draw_type,gp.player_turn, u.country,u.username,u.profileimg,
                    gp.fk_game_id, gp.player_tiles, gp.infoPop, gp.chatbadge, g.lastdraw FROM ".$prefix."_gameplayer gp
                    INNER JOIN ".$prefix."_games g ON gp.fk_game_id = g.game_id 
                    INNER JOIN ".$prefix."_users u ON gp.fk_player_id = u.id
                    WHERE g.invite=0 AND g.deleteby != $currplayer 
                    AND gp.fk_game_id=$gameid ORDER BY g.lastdraw ASC");

除了我们看不到的代码中的
fk\u game\u id
(稍后在循环中),您是否实际使用了第一个查询中的其他列?您好,您可以显示模式定义吗?我已经用表模式编辑了帖子。它们不再得到维护,并且已经开始使用。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果您选择PDO,。除了我们看不到的代码中的
fk_game_id
(稍后在循环中)之外,您是否实际使用了第一个查询中的其他列?您好,您可以显示模式定义吗?我已经用表模式编辑了帖子。它们不再得到维护,并且已经开始使用。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果您选择PDO,。这将不起作用,因为我无法获取包含对手数据的gameplayer db中的第二行…这将不起作用,因为我无法获取包含对手数据的gameplayer db中的第二行。。。