Php 将两个mysql查询合并为一个?
我有一个多人游戏网站,用户每20秒就会收到一份类似这样的游戏列表: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
$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中的第二行。。。