我有一个多人游戏网站,用户每 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_query,它会使用大量资源。
每个游戏都存储在 3 行的 2 个 db 表中。
一个包含游戏数据的游戏表行和 2 个游戏玩家表行,一个用于当前玩家,一个用于对手。
这是我必须为其运行第二次查询的对手的行。
是否可以将此行加入到第一个查询中,以便我每 20 秒只为玩家运行一次查询?
表模式如下:
桌面游戏 game_id - int(11) 邀请时间 - 时间戳 lastdraw - 时间戳 timetodraw - 日期时间 bag_tiles - 文本 table_tiles - 文本 new_tiles - 文本邀请 - int(11) 随机 - int(11) 活动 - int(11) 完成 - int(11) deleteby - int(11) warn1 - int(11) warn2 - int(11)
表游戏玩家 id - int(11) fk_game_id - int(11) fk_player_id - int(11) player_tiles - 文本 player_draws - int(11) first_draw - int(11) player_turn - int(11) last_draw_type - int(11) player_passes - int (11) swapped - int(11) player_win - int(11) player_points - int(11) infoPop - int(11) chatbadge - int(11)
表用户 id - int(11) 电子邮件 - varchar(255) 用户名 - varchar(255) 密码 - varchar(50) profileimg - varchar(25) 国家 - int(11) 注册 - 日期 date - 时间戳
希望这是有道理的,并希望得到帮助:-)