我有一个多人游戏网站,用户可以每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 - 文本 invite - int(11) random - int(11) active - 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) username - varchar(255) 密码 - varchar(50) profileimg - varchar(25) country - int(11) 注册 - 日期 日期 - 时间戳
希望这有意义并希望得到帮助: - )
答案 0 :(得分:1)
您可以尝试以下操作:
$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");